Appium Python,unittest,可以在一个测试类里,连续执行两条用例吗?

ma · 2014年10月29日 · 最后由 Jwong 回复于 2016年11月16日 · 1789 次阅读
#!_*_coding:utf-8_*_
import os
from selenium import webdriver
import time
import unittest

PATH = lambda p: os.path.abspath(
    os.path.join(os.path.dirname(__file__), p)
)

class OpenToSearch(unittest.TestCase):
    def setUp(self):
        desired_caps = {}
        #desired_caps['deviceName'] = 'QO4315C24235'
        desired_caps['deviceName'] = '9104b2aa'
        desired_caps['platformName'] = 'Android'
        desired_caps['browserName'] = ''
        desired_caps['platformVersion'] = '4.2.2'
        #desired_caps['app'] = PATH(r'C:\Users\mazhigang\Desktop\AndroidStorm.apk')
        desired_caps['appPackage'] = 'com.storm.smart'
        desired_caps['appActivity'] = '.LogoActivity'

        self.driver = webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
        time.sleep(8)

    def test_open_search(self):
        self.driver.find_element_by_id('com.storm.smart:id/web_page_head_search').click()

        time.sleep(5)
        search = self.driver.find_element_by_xpath("//android.widget.TextView[contains(@index,0)]")
        print search
        print search.text


    def test_get_hotword(self):
        s_page = self.driver.find_elements_by_id("com.storm.smart:id/search_hotwords_name")
        self.assertEqual(len(s_page),10,'not hotword ')


    def teardown(self):
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()

第一个用例打开了一个页面,我的第二个用例 test_get_hotword,想在第一条用例打开的页面上继续,可以这样吗?现在情况是报错。意思应该是已经有一个对话,不能新建

共收到 11 条回复 时间 点赞

首先回答标题的问题,是可以的。
建议 LZ 去充一下电,弄清楚 unittest 是怎么运行的,你就知道为什么了。

ma #11 · 2014年10月29日 Author

#1 楼 @anikikun 好,我再去了解下 unittest,还有一个问题,我第二条用例在第一条的基础上,也是可以的吗?

#2 楼 @test_skp 可以的。teardown 里不要 quit 就行

ma #3 · 2014年10月29日 Author

#3 楼 @anikikun 谢谢你,我再多研究研究。

unittest 里 test case 的执行顺序不是按照你编写的顺序执行的,且每个 case 都应该是相互独立的

恩,如 5L 所说,每个 test case 实际上是随机乱序的。 为了保证 case 的独立性和稳定可靠,不会被其他用例给影响。 所以建议需要一起做的用例,就写在一个 case 里,写成工作流也是可以的。

ma #10 · 2014年11月03日 Author

#5 楼 @xiaomayi0323
#6 楼 @anikikun 嗯,谢谢你们,我用例还是应该保持独立,不互相受影响

#7 楼 @test_skp 现在可以在一个类里连续执行多个测试方法了么,求教

#3 楼 @anikikun 不 quit 的话 是可以结束一个 session 再开启一个 session,可是把应用也结束了,所有流程都得重来一遍啊

其实很简单,setup 和 teardown 分别都有对应的 method、Class、Module 级别的
比如如下代码的执行

class TestUnitTestDemo02(unittest.TestCase):

    @classmethod
    def setUpClass(self):
        print "3"

    @classmethod
    def tearDownClass(cls):
        print "4"

    def setUp(self):
        print "5"

    def tearDown(self):
        print "6"

    def test_print01(self):
        print "7"

    def test_print02(self):
        print "8"

结果打印为:
3
5
7
6
5
8
6
4

if '__name__' == '__main__':
  suite = unittest.TestSuite()
  suite.addTest('test_open_search')
  cutie.addTest('test_get_hotword')
  unittest.TextTestRunner(verbosity=2).run(suite)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册