Appium / Unittest / Python - 阻止应用再次运行每个测试

时间:2017-09-30 17:43:43

标签: python unit-testing selenium junit appium

好的,请查看我的示例代码

我的ConnectBase类:

class ConnectBase(unittest.TestCase):
    def setUp(self):
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['deviceName'] = '4cfe4b59'
        desired_caps['platformVersion'] = '5.0'
        desired_caps['appPackage'] = 'com.xyz.bookshelf'
        desired_caps['appActivity'] = 'com.xyz.bookshelf.MainActivity'
        desired_caps['noReset'] = False
        self.driver_android = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
        self.driver_android.implicitly_wait(30)

我的主要文件有测试:

import unittest
from connect import ConnectBase
from main_screen import MainScreenCheck

class MainTests(ConnectBase, MainScreenCheck):
    with open('report.txt', 'w') as f:
        f.write("----------Bookshelf----------\n")

    def test_bookshelf_tutorial(self):
        self.addToFile("Test Tutorial")
        self.driver_android.orientation = 'LANDSCAPE'
        super(MainTests, self).logout_screen_check()

    def test_bookshelf_2(self):
        self.addToFile("Test 2")
        super(MainTests, self).login_screen_check()

    def test_bookshelf_3(self):
        self.addToFile("Test 3")
        super(MainTests, self).loading_screen_check()

    def test_bookshelf_4(self):
        self.addToFile("Test 4")
        super(MainTests, self).list_check()


if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(MainTests)
    unittest.TextTestRunner(verbosity=2).run(suite)
  1. 我运行脚本 - >它正在连接
  2. 它开始" test_bookshelf_tutorial()"
  3. 测试通过,我想继续" test_bookshelf_2()"但该应用程序正在重新启动...我必须再次通过教程屏幕...
  4. 问题在于每个单元测试" def test_xyz(self)"应用程序正在重新启动所以我不能使用unittest函数来显示报告中的通过测试,每次测试我必须经历我在测试之前做的所有事情

    我创建了测试报告的方法 - >我将每个测试结果添加到txt文件中...但我想知道是否有可能关闭此应用程序重新启动并使用正常的单元测试报告?

    或许还有另一种很好的方式来做自动化测试的报告?

1 个答案:

答案 0 :(得分:0)

尝试为您的测试用例下订单,有时测试依赖于彼此 在第一步中打开应用程序并仅在最后一步关闭它:

class MainTests(ConnectBase, TestCase):
  def step1(self):
      #open the application

  def step2(self):
      ...

  def steps(self):
    for name in sorted(dir(self)):
      if name.startswith("step"):
        yield name, getattr(self, name) 

  def test_steps(self):
    for name, step in self.steps():
      try:
        step()
      except Exception as e:
        self.fail("{} failed ({}: {})".format(step, type(e), e)
  • 我建议您使用像'TESTNG'这样的测试框架来定义测试优先级以管理测试顺序,但要确保始终执行第一个测试来打开应用程序;)