Appium 如何将每个用例连起来一起执行

crisy · 2014年02月28日 · 最后由 kaige201314 回复于 2016年07月22日 · 1616 次阅读

问题背景:
1.python 编写的用例,每个用例是一个 py,由三部分组成,setup,test,teardown
2.每次执行脚本前先手动或者 appium &将服务起来
3.单独每个 py 执行很正常,但都会在结束后一分多钟自动断开 session,见图 1
4.每个用例都从启动 app 后一步一步点击进来的

目的:
想把这些个 py 连起来,一起执行,当然每个用例的功能是相互独立的,没有依赖性,无顺序。

处理方案:
1.新写一个 py,由一个 setup,teardown 和中间将每个用例中的 test 部分。结果失败,提示没有找到相应的控件。
这是肯定的,因为上一个用例结束之后所在的页面并不是启动的主界面。

2.新写一个 py,用 os.system() 连起来执行,由于前面第 3 步提到的要等一分多钟,所以在每个中间写了个 time.sleep(100),具体代码如下:

import time
import os

os.system('python test01.py')
time.sleep(100)
os.system('python test02.py')
time.sleep(100)
os.system('python test03.py')
........

这样算是执行起来了,但是肯定不好,第一,time.sleep(100) 不靠谱,第二用例多了肯定太慢了!

求各位高手都用的什么方法,即科学而有效!

共收到 16 条回复 时间 点赞


附上图片

#1 楼 @wangyemami 好好看看 unnitest 的 testsuite

她的意思是 单独每个 py 执行很正常,但都会在结束后一分多钟自动断开 session。 即使放在 suite 里。

是否可以这样:扫描测试用例,将用例入列表。顺序执行用例,第一个用命执行完后发一个消息给主控,主控收到消息后将该用例从列表中移除,并对设备进行初始化。初始化完成后继续执行列表中的下一个用例。

建议好好看看 Python 的 unittest,或者 Nose,这种框架本身就是支持调度的

Python Testing Cookbook
楼主先学习下这本书吧

#6 楼 @wongidle 请问下这书有中文版的吗?在哪有售?电子版或纸制都行,或者你那有麻烦发我一下,谢谢。

#2 楼 @vigossjjj 嗯,我看看,谢谢。

#5 楼 @qddegtya 我现在建了一个集合,把所有 test 方法都 load 进来,然后用 unittest 自带的 runner 来运行,也是不行,还是 session 没有停掉。见截图

suite=unittest.TestLoader().loadTestsFromTestCase(TestClassname)
allTests=unittest.TestSuite(suite)
unittest.TextTestRunner(verbosity=2).run(allTests)

teardown 中有退出

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

亲们,我的问题解决啦,大家有发现的错误在哪了吗?问题在我发的内容中就存在哦~

#10 楼 @wangyemami 放在 Suite 里执行调度理论上应该是没问题的,问题还是在于 Session 没有正确退出,那显然是 tearDown(self) 里面没有执行到,你的 teardown 如果真是像你在这里贴出来的那样,那就是根本没有执行到,因为 unittest 中是【tearDown】,而不是【teardown】,没有被 overrides 导致。

#10 楼 @wangyemami 请添加头像吧?

#7 楼 @wangyemami google 一下 :) PDF 版很清晰

#14 楼 @wangyemami 这就告诉我们:码代码时不能够忘记一些基本的细节,比如大小写敏感啥的,小失误,大影响啊~

@wangyeming @qddegtya
我也遇到这个问题了,我写的 tearDow() 是对的啊,但是执行第二条用例时,就不行了,直接报错:

.EEEEEEEEEEEEEEEEEEEEEEE
Time Elapsed: 0:00:34.403000

ft2.1: ImportError: Failed to import test module: test_case001
Traceback (most recent call last):
File "C:\Python27\lib\unittest\loader.py", line 254, in find_tests
module = self._get_module_from_name(name)
File "C:\Python27\lib\unittest\loader.py", line 232, in _get_module_from_name
__import
(name)
File "F:\test-project\appium-xnol-copy\TestCase\test_case001.py", line 29, in
driver = webdriver.Remote('http://localhost:4723/wd/hub', BasePage.BaseAction.capabilities)
File "C:\Python27\lib\site-packages\appium\webdriver\webdriver.py", line 36, in __init
_
super(WebDriver, self).init(command_executor, desired_capabilities, browser_profile, proxy, keep_alive)
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 87, in init
self.start_session(desired_capabilities, browser_profile)
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 141, in start_session
'desiredCapabilities': desired_capabilities,
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 201, in execute
self.error_handler.check_response(response)
File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 181, in check_response
raise exception_class(message, screen, stacktrace)
WebDriverException: Message: A new session could not be created. (Original error: Requested a new session but one was in progress)

请帮忙看下吧,谢谢

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册