这里我们提供了使用测试用例集的工程示例（[点击下载](https://res.wx.qq.com/op_res/uu2OgkrsDAZoNFlfSfeMJf-MJB7lzQYoHq7qEKJYDXcUtCt6Flmzh9Ez1cPGl18K_EZgwNmT-npVpFFHRfjJ5w)）。说明:目前仅支持Python版本，需结合PyUnit使用。

#### 1、测试工程目录

- case：测试用例文件目录
- libs：基础操作文件目录，比如env.py封装环境初始化和清理操作
- test.py：入口文件

![](https://res8.wxqcloud.qq.com.cn/wxdoc/d7aeb387-f839-4875-bec7-98b36d79ad21.png)

#### 2、入口文件
- test.py中主要包括：初始化上下文环境，生成测试套件执行，清理环境

  ```python
  # -*- coding: utf-8 -*-
  import sys
  import unittest

  reload(sys)
  sys.path.append("./")
  sys.setdefaultencoding("utf-8")

  from libs import env
  from case import TestGameCase
  from case import TestRankCase

  if __name__ == "__main__":
      #初始化上下文环境
      env.env_setup()

      #生成测试套件，执行
      suite = unittest.TestSuite()

      tests = [TestGameCase("test_enter_game"), TestRankCase("test_rank")]
      suite.addTests(tests)

      runner = unittest.TextTestRunner(verbosity=2)
      runner.run(suite)

      #清理上下文环境，释放资源
      env.env_teardown()

  ```

#### 3、初始化和清理环境

初始化时会生成全局唯一CaseContext实例，仅能在测试用例执行完成后释放，否则用例执行会报错

- libs/env.py：

```python
# -*- coding: utf-8 -*-

from mini_game_test_case_py.case.MiniGameTestTools import MiniGameTestTools
from mini_game_test_case_py.lib import Logger

TEST_TOOL = None
TEST_CONTEXT = None

def env_setup():
    '''
    初始化上下文环境，生成CaseContext唯一实例
    :return: 
    '''
    global TEST_TOOL, TEST_CONTEXT
    if TEST_TOOL == None:
        TEST_TOOL = MiniGameTestTools(if_guard=True)
        TEST_CONTEXT = TEST_TOOL.context
        Logger.info('env startup')
    return TEST_CONTEXT

def env_teardown():
    '''
    清理环境
    :return: 
    '''
    global TEST_TOOL
    if TEST_TOOL != None:
        TEST_TOOL.stop()
        Logger.info('env tear down')
```

#### 4、编写测试用例

- case/test_base.py：测试用例基类TestBaseCase，获取全局context实例

  ```python
  # -*- coding: utf-8 -*-
  import unittest
  from mini_game_test_case_py.lib import Logger

  from libs import env

  class TestBaseCase(unittest.TestCase):
      @classmethod
      def setUpClass(cls):
          Logger.info('setUpClass')
          cls.context = env.env_setup()
  ```

- case/test_game.py：测试游戏主场景用例，继承TestBaseCase，在setUp()函数中获取context实例

  ```python
  # -*- coding: utf-8 -*-
  from mini_game_test_case_py.lib import Logger
  from mini_game_test_case_py.lib import Asserts
  from test_base import TestBaseCase

  class TestGameCase(TestBaseCase):
      def setUp(self):
          self.context = self.__class__.context

      def tearDown(self):
          pass

      def test_enter_game(self):
          Logger.info("case start")
          self.context.sleep(10 * 1000)
          #进入游戏
          path = u"{laya.display.Stage[nodeType=laya.display.Stage|covered=false]}>{laya.display.Sprite[index=0|nodeType=laya.display.Sprite|covered=false]}>{laya.display.Sprite[index=2|nodeType=laya.display.Sprite]}>{laya.display.Sprite[index=2|nodeType=laya.display.Sprite|covered=false]}"
          node = self.context.find_path(path)
          Asserts.assert_nodeselector_exists(node)
          node.tap()
          self.context.sleep(1000)
          self.context.tap(0.5, 0.5, is_per=True)
          self.context.sleep(5000)

          Logger.info("case end")
  ```

- case/test_rank.py：测试排行榜用例文件

  ```python
  # -*- coding: utf-8 -*-
  from mini_game_test_case_py.lib import Logger
  from mini_game_test_case_py.lib import Asserts
  from test_base import TestBaseCase

  class TestRankCase(TestBaseCase):
      def setUp(self):
          self.context = self.__class__.context

      def tearDown(self):
          pass

      def test_rank(self):
          Logger.info("case start")
          self.context.sleep(1000)
          #查看排行榜
          path = u"{laya.display.Stage[nodeType=laya.display.Stage|covered=false]}>{laya.display.Sprite[index=0|nodeType=laya.display.Sprite|covered=false]}>{laya.display.Sprite[index=5|nodeType=laya.display.Sprite|covered=false]}>{laya.display.Sprite[index=3|nodeType=laya.display.Sprite|covered=false]}"
          node = self.context.find_path(path)
          Asserts.assert_nodeselector_exists(node)
          node.tap()
          self.context.sleep(6000)
          Logger.info("case end")
  ```



#### 5、执行用例

- 本地执行

通过命令行进入test.py所在目录，执行命令，运行Case：

```shell
python test.py -t ide -p {port} #  port为刚才命令行工具设置的端口(如9421) 
```

- 云测试执行

  （1）打包：zip包根目录下必须包含test.py文件，不能有上一级目录

 ![](https://res8.wxqcloud.qq.com.cn/wxdoc/c9569035-0631-456c-ab6d-49dea15e61d2.png)

  （2）提交到云测试平台并提交测试，测试日志如下：

  ![](https://res8.wxqcloud.qq.com.cn/wxdoc/0dc8483b-8931-44e4-bc01-58ec62d159fc.png)
