mirror of
https://gitlab.com/YuukiPS/GSServer-CBT.git
synced 2025-08-03 10:20:12 +03:00
melon
This commit is contained in:
109
soggy_resources/lua/UAuto/Base/UAutoCommon.lua
Normal file
109
soggy_resources/lua/UAuto/Base/UAutoCommon.lua
Normal file
@@ -0,0 +1,109 @@
|
||||
--测试类型枚举定义
|
||||
|
||||
|
||||
function CreatEnumTable(tbl, index)
|
||||
local enumtbl = {}
|
||||
local enumindex = index or 0
|
||||
for i, v in ipairs(tbl) do
|
||||
enumtbl[v] = enumindex + i
|
||||
end
|
||||
return enumtbl
|
||||
end
|
||||
|
||||
AutoTestObject = CS.UnityEngine.GameObject.Find("AutoTestObject")
|
||||
|
||||
if AutoTestObject ~= nil then
|
||||
driver = CS.UnityEngine.GameObject.Find("AutoTestObject"):GetComponent("AutoTestDriver")
|
||||
end
|
||||
|
||||
if AutoTestObject == nil then
|
||||
driver = CS.UnityEngine.GameObject.Find("GameManager"):GetComponent("AutoTestDriver")
|
||||
end
|
||||
|
||||
coroutineTable = {}
|
||||
|
||||
function UAutoCoroutine(co_func)
|
||||
return function(...)
|
||||
if(co_func~=nil) then
|
||||
local obj = ...
|
||||
local coIndex = #coroutineTable+1
|
||||
coroutineTable[coIndex] = {}
|
||||
driver.luaMonoTestFinished=false
|
||||
coroutineTable[coIndex]["thread"]= coroutine.create(co_func)
|
||||
coroutineTable[coIndex]["finished"] = false
|
||||
|
||||
assert(coroutine.resume(coroutineTable[coIndex]["thread"],obj))
|
||||
--delete immediately dead coroutine
|
||||
if(coroutine.status(coroutineTable[coIndex]["thread"])=="dead") then
|
||||
table.remove(coroutineTable)
|
||||
if (#coroutineTable == 0) then
|
||||
driver.luaMonoTestFinished=true
|
||||
end
|
||||
end
|
||||
else
|
||||
driver.luaMonoTestFinished=true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--协程执行完成callback
|
||||
function UAutoCorotineCallback(...)
|
||||
local testObj = {...}
|
||||
local coCount = #coroutineTable
|
||||
local currentCo = coroutineTable[coCount]["thread"]
|
||||
|
||||
if(currentCo==nil) then
|
||||
return
|
||||
end
|
||||
|
||||
if(coroutine.status(currentCo)~="dead") then
|
||||
assert(coroutine.resume(currentCo,testObj))
|
||||
end
|
||||
if(coroutine.status(currentCo)=="dead") then
|
||||
--delete currentCo
|
||||
table.remove(coroutineTable)
|
||||
if (#coroutineTable == 0) then
|
||||
driver.luaMonoTestFinished=true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
CaseType =
|
||||
{
|
||||
"Test",
|
||||
"MonoTest",
|
||||
"SetUp",
|
||||
"TearDown"
|
||||
}
|
||||
|
||||
CaseType = CreatEnumTable(CaseType)
|
||||
|
||||
RunMode =
|
||||
{
|
||||
"Host",
|
||||
"Client",
|
||||
"Local"
|
||||
}
|
||||
|
||||
RunMode = CreatEnumTable(RunMode)
|
||||
|
||||
IsSync =
|
||||
{
|
||||
"True",
|
||||
"False"
|
||||
}
|
||||
|
||||
IsSync = CreatEnumTable(IsSync)
|
||||
|
||||
--lua test case 基类初始化
|
||||
TestCaseBaseClass = CS.MoleMole.UAuto.TestCaseBase
|
||||
TestCaseNetworkBaseClass = CS.MoleMole.UAuto.TestCaseNetworkBase
|
||||
TestCaseNumberBaseClass = CS.MoleMole.UAuto.TestCaseNumberBase
|
||||
TestCaseElementBaseClass = CS.MoleMole.UAuto.TestCaseElementBase
|
||||
TestCaseQuestBaseClass = CS.MoleMole.UAuto.TestCaseQuestBase
|
||||
TestCaseSceneBase = CS.MoleMole.UAuto.TestCaseSceneBase
|
||||
TestCaseCombatBase = CS.MoleMole.UAuto.TestCaseCombatBase
|
||||
--TestDriver = CS.MoleMole.UAuto.AutoTestDriver
|
||||
uAutoLuaTestCases = {}
|
20
soggy_resources/lua/UAuto/Base/UAutoCoroutine.lua
Normal file
20
soggy_resources/lua/UAuto/Base/UAutoCoroutine.lua
Normal file
@@ -0,0 +1,20 @@
|
||||
local util = require ('Base/util')
|
||||
|
||||
local cs_coroutine_runner = nil
|
||||
if AutoTestObject ~= nil then
|
||||
cs_coroutine_runner = CS.UnityEngine.GameObject.Find("AutoTestObject"):GetComponent("AutoTestDriver")
|
||||
end
|
||||
|
||||
if AutoTestObject == nil then
|
||||
cs_coroutine_runner = CS.UnityEngine.GameObject.Find("GameManager"):GetComponent("AutoTestDriver")
|
||||
end
|
||||
|
||||
local function async_yield_return(to_yield, cb)
|
||||
print(to_yield)
|
||||
cs_coroutine_runner:YieldAndCallback(to_yield, cb)
|
||||
end
|
||||
|
||||
|
||||
return {
|
||||
yield_return = util.async_to_sync(async_yield_return)
|
||||
}
|
335
soggy_resources/lua/UAuto/Base/UAutoLuaTestBase.lua
Normal file
335
soggy_resources/lua/UAuto/Base/UAutoLuaTestBase.lua
Normal file
@@ -0,0 +1,335 @@
|
||||
require('Base/Class')
|
||||
|
||||
yield_return = require('UAuto/Base/UAutoCoroutine').yield_return
|
||||
local util = require ('Base/util')
|
||||
|
||||
|
||||
local UAutoLuaTestBase = class("UAutoLuaTestBase",nil)
|
||||
|
||||
--Global Atrributes for test suite
|
||||
--local Category = "All"
|
||||
--local Order = "1000"
|
||||
--local Description = "Base Description"
|
||||
|
||||
UAutoLuaTestBase.base = TestCaseBaseClass()
|
||||
|
||||
setmetatable(UAutoLuaTestBase,{ __index = UAutoLuaTestBase.base })
|
||||
|
||||
sceneData = sceneData or require('Base/SceneData')
|
||||
--[[
|
||||
@desc: 对话
|
||||
time:2018-07-16 14:55:55
|
||||
--@index: 选择第x项,从0开始
|
||||
@return: nil
|
||||
]]
|
||||
function UAutoLuaTestBase:Talk(index)
|
||||
self._dialogPanel = self.InLevelMainPage:GetComponent("MonoInLevelMainPage"):GetPrivateField("_dialogPanel")
|
||||
self._listItems = self._dialogPanel:GetPrivateField("_listItems")
|
||||
print(self._listItems)
|
||||
self._listItems[index].actionButton.onClick:Invoke()
|
||||
end
|
||||
|
||||
local WaitTalkTimeout = 10
|
||||
function UAutoLuaTestBase:WaitTalk(index)
|
||||
local byIndex=true
|
||||
local _type = type(index)
|
||||
if _type == type("string") then
|
||||
byIndex=false
|
||||
end
|
||||
|
||||
yield_return(self.base:SelectDialog(index))
|
||||
|
||||
end
|
||||
|
||||
--[[
|
||||
@desc: 捡取
|
||||
time:2018-07-16 14:55:55
|
||||
--@index: 选择第x项,从0开始
|
||||
@return: nil
|
||||
]]
|
||||
function UAutoLuaTestBase:Pick(index)
|
||||
yield_return(self.base:Pick(index))
|
||||
end
|
||||
|
||||
function UAutoLuaTestBase:ChangeAvatar(name, isLeader)
|
||||
isLeader = isLeader or false
|
||||
-- if name=="PlayerGirl" then
|
||||
-- name="PlayerBoy"
|
||||
-- end
|
||||
|
||||
local perfabName = name
|
||||
if name=="Anbo" then
|
||||
perfabName="Bow_Ambor"
|
||||
name="Ambor"
|
||||
end
|
||||
|
||||
|
||||
|
||||
yield_return(self.base:RefreshTeam(perfabName,isLeader))
|
||||
yield_return(CS.UnityEngine.WaitForSeconds(1))
|
||||
yield_return(self.base:RefreshTeam(perfabName,isLeader))
|
||||
|
||||
yield_return(self.base:WaitFoundGameObject("InLevelMainPage",function(result) self.InLevelMainPage = result end))
|
||||
|
||||
self.avatar = self.InLevelMainPage:FindGameObjectsInChildren(name)
|
||||
assert(self.avatar.Length>0,"切换角色"..name.."失败")
|
||||
--print(self.avatar)
|
||||
local rectTransform = self.avatar[0]:GetComponent("RectTransform")
|
||||
--print(rectTransform.rect.height)
|
||||
if (rectTransform.rect.height>0) then
|
||||
self.avatar[0]:GetComponent("MoleMole.MonoTeamBtn").actionButton.onClick:Invoke()
|
||||
yield_return(CS.UnityEngine.WaitForSeconds(2))
|
||||
end
|
||||
|
||||
local entityManager = singletonManager:GetSingletonInstance("MoleMole.EntityManager")
|
||||
|
||||
local localAvatar = entityManager:GetLocalAvatarEntity()
|
||||
|
||||
--print(localAvatar.gameObject.activeInHierarchy)
|
||||
while (localAvatar.gameObject.activeInHierarchy~=true)
|
||||
do
|
||||
yield_return(CS.UnityEngine.WaitForSeconds(1))
|
||||
end
|
||||
end
|
||||
--[[
|
||||
@desc: 等待CutScene或TalkDialog结束
|
||||
time:2018-07-16 14:57:12
|
||||
--@talkToEnd: 是否进行点击
|
||||
@return: nil
|
||||
]]
|
||||
function UAutoLuaTestBase:WaitCutScene(talkToEnd,timeout,skipIfNotExist)
|
||||
skipIfNotExist = skipIfNotExist or false
|
||||
self.talkDialog =nil
|
||||
self.InLevelCutScenePage=nil
|
||||
self.TutorialDialog = nil
|
||||
timeout = timeout or 60
|
||||
while self.talkDialog==nil and self.InLevelCutScenePage==nil and self.TutorialDialog==nil do
|
||||
self.talkDialog = CS.UnityEngine.GameObject.Find("TalkDialog")
|
||||
self.InLevelCutScenePage = CS.UnityEngine.GameObject.Find("InLevelCutScenePage")
|
||||
self.TutorialDialog = CS.UnityEngine.GameObject.Find("TutorialDialog")
|
||||
yield_return(CS.UnityEngine.WaitForSeconds(1))
|
||||
timeout = timeout - 1
|
||||
|
||||
if timeout<0 then
|
||||
if skipIfNotExist == true then
|
||||
return
|
||||
else
|
||||
assert(1==0,"等待CutScene出现超时.")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if(self.InLevelCutScenePage~=nil) then
|
||||
self.monoInLevelCutScenePage = self.InLevelCutScenePage:GetComponent("MonoInLevelCutScenePage")
|
||||
print(self.monoInLevelCutScenePage)
|
||||
assert(self.monoInLevelCutScenePage~=nil, "monoInLevelCutScenePage is null");
|
||||
end
|
||||
|
||||
if(self.talkDialog~=nil) then
|
||||
print(typeof(CS.UnityEngine.UI.Button))
|
||||
self.talkButton = self.talkDialog:GetComponentInChildren(typeof(CS.UnityEngine.UI.Button))
|
||||
self.selectButtons = self.talkDialog:FindGameObjectsInChildren("0")
|
||||
end
|
||||
|
||||
|
||||
if(talkToEnd) then
|
||||
print("Start talk to end")
|
||||
timeout = 120
|
||||
if(self.InLevelCutScenePage~=nil or self.talkDialog~=nil or self.TutorialDialog~=nil) then
|
||||
local hasCutScene=true
|
||||
local hasTalkDialog=true
|
||||
local hasTutorialDialog=true
|
||||
|
||||
while (hasTalkDialog or hasCutScene)
|
||||
do
|
||||
self.talkDialog = CS.UnityEngine.GameObject.Find("TalkDialog")
|
||||
self.InLevelCutScenePage = CS.UnityEngine.GameObject.Find("InLevelCutScenePage")
|
||||
|
||||
if(self.InLevelCutScenePage~=nil and self.InLevelCutScenePage.activeInHierarchy) then
|
||||
self.monoInLevelCutScenePage = self.InLevelCutScenePage:GetComponent("MonoInLevelCutScenePage")
|
||||
assert(self.monoInLevelCutScenePage~=nil, "monoInLevelCutScenePage is null");
|
||||
end
|
||||
|
||||
if(self.monoInLevelCutScenePage==nil or self.monoInLevelCutScenePage.isActiveAndEnabled==false) then
|
||||
hasCutScene=false
|
||||
end
|
||||
|
||||
if(self.talkDialog==nil or self.talkDialog.activeInHierarchy==false) then
|
||||
hasTalkDialog=false
|
||||
end
|
||||
|
||||
if(self.TutorialDialog==nil or self.TutorialDialog.activeInHierarchy==false) then
|
||||
hasTutorialDialog=false
|
||||
end
|
||||
|
||||
yield_return(CS.UnityEngine.WaitForSeconds(1))
|
||||
|
||||
if(self.monoInLevelCutScenePage~=nil) then
|
||||
print("Click CutScene.")
|
||||
self.monoInLevelCutScenePage.onClick:Invoke()
|
||||
yield_return(CS.UnityEngine.WaitForSeconds(1))
|
||||
end
|
||||
yield_return(CS.UnityEngine.WaitForEndOfFrame())
|
||||
if(self.talkDialog~=nil and self.talkDialog.activeInHierarchy) then
|
||||
self.talkButton = self.talkDialog:GetComponentInChildren(typeof(CS.UnityEngine.UI.Button))
|
||||
self.selectButtons = self.talkDialog:FindGameObjectsInChildren("0")
|
||||
print("Click Talk Button.")
|
||||
self.talkButton.onClick:Invoke()
|
||||
if(self.selectButtons.Length>0) then
|
||||
print("Select Button 0.")
|
||||
local button = self.selectButtons[0]:GetComponent("UnityEngine.UI.Button")
|
||||
if button~=nil then
|
||||
yield_return(CS.UnityEngine.WaitForSeconds(1))
|
||||
button.onClick:Invoke()
|
||||
end
|
||||
yield_return(CS.UnityEngine.WaitForSeconds(1))
|
||||
end
|
||||
end
|
||||
|
||||
-- if(hasTutorialDialog) then
|
||||
-- print("click Screen for Tutorial")
|
||||
-- yield_return(self.base:ClickScreen())
|
||||
-- end
|
||||
timeout = timeout-1
|
||||
assert(timeout>0,"WaitCutScene timeout")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--[[
|
||||
@desc: 打开小地图
|
||||
author:{wyl}
|
||||
time:2018-07-25 15:47:11
|
||||
@return:
|
||||
]]
|
||||
function UAutoLuaTestBase:OpenMap()
|
||||
yield_return(self.base:WaitFoundGameObject("InLevelMainPage",function(result) self.InLevelMainPage = result end,false))
|
||||
self.MonoMiniMap = self.base.InLevelMainPage:FindComponentInChildren("MoleMole.MonoMiniMap")
|
||||
self._grpMap = self.MonoMiniMap:GetPrivateField("_grpMap")
|
||||
self._grpMap.gameObject:GetComponent("Button").onClick:Invoke()
|
||||
yield_return(self.base:WaitFoundGameObject("InLevelMapPage",function(result) self.InLevelMapPage = result end,false))
|
||||
assert(self.InLevelMapPage~=nil,"InLevelMapPage is nil")
|
||||
self.MonoInLevelMapPage = self.InLevelMapPage:GetComponent("MonoInLevelMapPage")
|
||||
yield_return(CS.UnityEngine.WaitForSeconds(1))
|
||||
end
|
||||
|
||||
function UAutoLuaTestBase:CloseMap()
|
||||
yield_return(self.base:WaitFoundGameObject("InLevelMapPage",function(result) self.InLevelMapPage = result end,false))
|
||||
assert(self.InLevelMapPage~=nil,"InLevelMapPage is nil")
|
||||
self.MonoInLevelMapPage = self.InLevelMapPage:GetComponent("MonoInLevelMapPage")
|
||||
assert(self.MonoInLevelMapPage~=nil,"self.MonoInLevelMapPage is nil")
|
||||
yield_return(CS.UnityEngine.WaitForSeconds(2))
|
||||
self.MonoInLevelMapPage.closeBtn.onClick:Invoke()
|
||||
yield_return(CS.UnityEngine.WaitForSeconds(1))
|
||||
|
||||
end
|
||||
|
||||
function UAutoLuaTestBase:WaitFoundEntity(name, timeout, range)
|
||||
local name = name or ""
|
||||
local timeout = timeout or 60
|
||||
local range = range or 100
|
||||
yield_return(CS.UnityEngine.WaitForSeconds(1))
|
||||
yield_return(self.base:WaitFoundNearByEntityByName(name,function(result) self.foundEntity = result end,timeout,range))
|
||||
end
|
||||
|
||||
|
||||
function UAutoLuaTestBase:WaitFoundEntityById(Id, timeout, range)
|
||||
local Id = Id or 0
|
||||
local timeout = timeout or 60
|
||||
local range = range or 100
|
||||
yield_return(self.base:WaitFoundNearByEntityById(Id,function(result) self.foundEntity = result end,timeout,range))
|
||||
end
|
||||
|
||||
|
||||
function UAutoLuaTestBase:WaitMoveToEntityByName(name,timeout,range)
|
||||
local name = name or ""
|
||||
local timeout = timeout or 60
|
||||
local range = range or 100
|
||||
yield_return(self.base:WaitFoundNearByEntityByName(name,function(result) self.moveTarget = result end,timeout,range))
|
||||
yield_return(self.base:MoveToEntity(self.moveTarget,timeout,1))
|
||||
end
|
||||
|
||||
function UAutoLuaTestBase:ReturnToHome()
|
||||
self.monoInLevelMainPage = self.base.InLevelMainPage:GetComponent("MonoInLevelMainPage")
|
||||
self.monoInLevelMainPage.gmButton.onClick:Invoke()
|
||||
yield_return (self.base:WaitFoundGameObject("InLevelDebugMenuDialog",function(result) self.InLevelDebugMenuDialog = result end))
|
||||
self.MonoInLevelDebugMenuDialog = self.InLevelDebugMenuDialog:GetComponent("MonoInLevelDebugMenuDialog")
|
||||
self.MonoInLevelDebugMenuDialog.returnButton.onClick:Invoke()
|
||||
yield_return (self.base:WaitLevelLoaded("Home"))
|
||||
end
|
||||
|
||||
function UAutoLuaTestBase:EnterMaster(name)
|
||||
name = name or "Daily"
|
||||
yield_return(self.base:EnterBigWorldFromGame(name,false))
|
||||
yield_return (self.base:WaitLevelLoaded("Level"))
|
||||
end
|
||||
|
||||
function UAutoLuaTestBase:Reconnect(name)
|
||||
name = name or "Daily"
|
||||
yield_return(self:ReturnToHome())
|
||||
yield_return(CS.UnityEngine.WaitForSeconds(5))
|
||||
yield_return(self:EnterMaster(name))
|
||||
end
|
||||
|
||||
|
||||
function UAutoLuaTestBase:FinishAllNoob()
|
||||
yield_return(CS.UnityEngine.WaitForSeconds(1))
|
||||
yield_return(self.base:RunGM("clear all",true,true))
|
||||
yield_return(self.base:RunGM("Quest Finish Father 351 352 353"))
|
||||
yield_return(CS.UnityEngine.WaitForSeconds(5))
|
||||
|
||||
local mapPage = CS.UnityEngine.GameObject.Find("InLevelMapPage")
|
||||
if mapPage~=nil and mapPage.activeInHierarchy then
|
||||
yield_return(self:CloseMap())
|
||||
end
|
||||
|
||||
print("frame index: GM")
|
||||
yield_return(self.base:WaitFrames(31))
|
||||
yield_return(self.base:MouseClick( "Canvas/Pages/InLevelMainPage/GrpMainPage/GrpMainBtn/GrpMainToggle/BtnGm/Icon"))
|
||||
|
||||
|
||||
print("frame index: Return")
|
||||
yield_return(self.base:WaitFrames(37))
|
||||
yield_return(self.base:MouseClick( "Canvas/Dialogs/InLevelDebugMenuDialog/Return/Text"))
|
||||
|
||||
print("frame index: EnterBigWorldFromGame")
|
||||
yield_return(self.base:EnterBigWorldFromGame(self.base.driver.ServerName, false))
|
||||
|
||||
print("frame index: Jump")
|
||||
yield_return(self.base:WaitFrames(30))
|
||||
yield_return(self.base:Jump())
|
||||
|
||||
end
|
||||
|
||||
function UAutoLuaTestBase:ReEnterBigWorld()
|
||||
print("ReEnterBigWorld")
|
||||
local gameManager = CS.UnityEngine.GameObject.Find("GameManager")
|
||||
local gameManagerComponent = gameManager:GetComponent("GameManager")
|
||||
if gameManagerComponent.isOnlineMode then
|
||||
yield_return(CS.UnityEngine.WaitForSeconds(1))
|
||||
singletonManager:GetSingletonInstance("MoleMole.NetworkManager"):RequestLeaveScene();
|
||||
yield_return(CS.UnityEngine.WaitForSeconds(1))
|
||||
yield_return(self.base:EnterBigWorldFromGame(""))
|
||||
yield_return(CS.UnityEngine.WaitForSeconds(1))
|
||||
else
|
||||
singletonManager:GetSingletonInstance("MoleMole.PlayerModule"):GoBackHome();
|
||||
yield_return(self.base:EnterStreaming())
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function UAutoLuaTestBase:GetIntPart(x)
|
||||
if x <= 0 then
|
||||
return math.ceil(x);
|
||||
end
|
||||
|
||||
if math.ceil(x) == x then
|
||||
x = math.ceil(x);
|
||||
else
|
||||
x = math.ceil(x) - 1;
|
||||
end
|
||||
return x;
|
||||
end
|
||||
|
||||
return UAutoLuaTestBase
|
Reference in New Issue
Block a user