51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

测试开发精英班,通向高级软件测试工程师【周活动】 找茬--心里圈的故事 !【长期招募】博为峰网校招聘兼职讲师!横扫BAT,Python全栈测试开发技能大全
【105期】:敏捷流程下的测试理论及探索性测试 【征稿】提交你的测试成绩单! 【专题】用尽一切办法只为让你学好用例 自学软件测试那点事
查看: 452|回复: 0

[转贴] 在 Xunit 框架下使用 Appium 跑多个测试用例时,setUp 方法清除掉上一个 Case 的步...

[复制链接]

该用户从未签到

发表于 2019-4-12 17:18:42 | 显示全部楼层 |阅读模式
Unittest等测试框架的执行流程

setUp() -> testCase1() -> tearDown() -> setUp() -> testCase2() -> tearDown()

场景:

使用Unittest或其他框架
1、case1是测试登录功能
2、case2是接着case1登录后做操作的

解决思路 一:从AppiumServer处规避

1、启动AppiumServer的时候,命令带上参数--no-reset
这个参数的意思是:

session 之间不重置应用状态

这个参数相信很多人都用过。
那么使用了这个参数的话,需要在启动AppiumServer的脚本后面加一个动作:

删除待测应用

2、desired_caps中必须带app这个参数;

那么运行的完整逻辑是这样的:
1、在testSuite层的setUp()中通过脚本启动AppiumServer,并删除待测应用;
2、起第一个Session,检测到app未安装,先安装app,并执行完testcase1,tearDown()处关闭应用;
3、起第二个Session的时候,检测到当前app已安装,不执行清除操作,打开app,在testcase1结束的条件下执行testcase2;

参考代码:

  1. # -*- coding:UTF-8 -*-

  2. import os,subprocess
  3. import unittest
  4. from appium import webdriver
  5. from time import sleep

  6. # Returns abs path relative to this file and not cwd
  7. PATH = lambda p: os.path.abspath(
  8.     os.path.join(os.path.dirname(__file__), p)
  9. )

  10. class ContactsAndroidTests(unittest.TestCase):
  11.     def setUp(self):
  12.         desired_caps = {}
  13.         desired_caps['platformName'] = 'Android'
  14.         desired_caps['platformVersion'] = '4.4'
  15.         desired_caps['deviceName'] = 'Nexus 4'
  16.         desired_caps['app'] = PATH(
  17.             'wangyixinwen_405.apk'
  18.         )
  19.         desired_caps['appPackage'] = 'com.netease.newsreader.activity'
  20.         desired_caps['appActivity'] = 'com.netease.nr.biz.ad.AdActivity'
  21.         self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

  22.     def tearDown(self):
  23.         self.driver.quit()

  24.     def testCase1(self):
  25.         sleep(10)
  26.         print("this is test case1")

  27.     def testCase2(self):
  28.         sleep(10)
  29.         print("this is test case2")


  30. if __name__ == '__main__':
  31.     deviceId = 'ed92129fxw'
  32.     subprocess.Popen("adb uninstall com.netease.newsreader.activity")
  33.     appiumServer = subprocess.Popen("appium -U%s --no-reset"%deviceId,shell=True)
  34.     sleep(5)
  35.     suite = unittest.TestLoader().loadTestsFromTestCase(ContactsAndroidTests)
  36.     unittest.TextTestRunner(verbosity=2).run(suite)
  37.     os.system('taskkill /f /im node.exe')
复制代码
解决思路 二:将app从desired_caps去掉

这个方法仅限于UIAutomator模式下,因为Selendroid模式是必须带app这个参数的
那么这个方式就是将apk的install和uninstall步骤都通过脚本去做
这个方式不如1好用。


回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /2 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2019-8-18 17:46 , Processed in 0.059743 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2019 Comsenz Inc.

快速回复 返回顶部 返回列表