该网站上更新文章有延迟,如需查看关于python+appium文章,请前往testhome关注我哦。https://testerhome.com/topics/27802
这篇文章总结了我平时用的比较多的3个设置,后续有用到其它的,会继续更新哦。
一、运行时会重装APP问题
问题:在使用Appium运行自动化代码的时候,每次运行会自动清除APP的原来数据,并将APP卸载,再重新安装打开。
解决:在APP启动的参数设置中添加"noReset": True,表示启动APP时不清除APP里的原有的数据。未设置该参数,系统默认为"noReset": False,表示在启动APP时会自动清除卸载APP,重新安装,所以每次打开的APP都是新安装的APP。
代码示例:
from appium import webdriver
def start(self):
caps = {"platformName": "Android",
"deviceName": "ABCDEFGHIJKLMNOPQ",
"platforVersion": "9",
"appPackage": "com.sina.weibo",
"appActivity": "com.sina.weibo.SplashActivity",
"autoGrantPermissions": "true",
"automationName": "UiAutomator2",
# 启动app时不要清除app里的原有的数据
"noReset": True
}
self.driver = webdriver.Remote("<http://localhost:4723/wd/hub>", caps)
self.driver.implicitly_wait(20)
二、执行测试用例会重启APP
问题:执行多条测试用例时,每执行完一个测试用例,都会重新启动AP
解决:在测试用例类中导入pytest,将测试用例类中的初始化函数设置为setup_class,修改后启动APP,只会执行一次初始化。
setup_class(self):这是一个class级别的setup函数,它会在这个测试类TestAccountLogin里所有test执行之前,被调用一次。
teardown_class(self):这是一个class级别的teardown函数,他会在这个测试类TestAccountLogin里所有test执行之后,被调用一次。
代码示例:
import pytest
from common.init import AppStart
class TestAccountLogin:
def setup_class(self):
self.accountloginpage = AppStart.start()
def teardown_class(self):
AppStart.quit()
三、自定义测试用例执行顺序
问题:默认情况下,pytest框架的测试用例执行顺序是按照字母的顺序执行的,如何自定义设置测试用例的执行顺序?
解决:有两种解决方法,分别为:
1.使用函数修饰符的方式来标记被测试函数执行的顺序,插件名称为pytest-ordering
2.将测试用例命名为数字
方法一:使用函数修饰符的方式来标记被测试函数执行的顺序
1.需要先安装插件pytest-ordering
- 安装包安装:python setup.py install
- 命令行安装:pip3 install pytest-ordering
插件安装成功如下图所示
2.使用方法
- 标记于被测试函数,@pytest.mark.run(order=x)
- 根据order传入的参数来解决运行问题
- order值全为正数或全为负数时,值越小,优先级越高
- 正数和负数同时存在时,正数优先级高
如下所示:
import pytest
from common.init import AppStart
class TestAccountLogin:
def setup_class(self):
self.accountloginpage = AppStart.start()
@pytest.mark.run(order=-1)
def test_account(self):
print("01")
@pytest.mark.run(order=2)
def test_pwd(self):
print("02")
@pytest.mark.run(order=3)
def test_phone(self):
print("03")
def teardown_class(self):
AppStart.quit()
以上会按照test_pwd→test_phone→test_account的顺序执行
方法二:将测试用例的函数名命名为数字,即会按照数字由小到大的顺序执行
如下所示:
import pytest
from common.init import AppStart
class TestAccountLogin:
def setup_class(self):
self.accountloginpage = AppStart.start()
@pytest.mark.run(order=-1)
def test_01(self):
print("01")
@pytest.mark.run(order=2)
def test_02(self):
print("02")
@pytest.mark.run(order=3)
def test_03(self):
print("03")
def teardown_class(self):
AppStart.quit()
会按照01→02→03的顺序执行
以上内容有错误的地方,大家多多指正,谢谢!