这篇文章总结了我平时用的比较多的 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

插件安装成功如下图所示

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 的顺序执行

以上内容有错误的地方,大家多多指正,谢谢!


↙↙↙阅读原文可查看相关链接,并与作者交流