这篇文章总结了我平时用的比较多的 3 个设置,后续有用到其它的,会继续更新哦。
问题:在使用 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)
问题:执行多条测试用例时,每执行完一个测试用例,都会重新启动 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
插件安装成功如下图所示
2.使用方法
如下所示:
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 的顺序执行
以上内容有错误的地方,大家多多指正,谢谢!