python+appium+pytest自动化测试-参数化设置

本文介绍了如何使用Python的pytest框架进行自动化测试的参数化设置,包括使用装饰器@pytest.mark.parametrize实现单参数、多参数的参数化,以及读取内部列表和外部yaml文件的数据。通过示例展示了不同参数组合的测试用例执行,并提到了在读取yaml文件时可能遇到的问题。
摘要由CSDN通过智能技术生成

来自APP Android端自动化测试初学者的笔记,写的不对的地方大家多多指教哦。(所有内容均以微博V10.11.2版本作为例子)

在自动化测试用例执行过程中,经常出现执行相同的用例,但传入不同的参数,导致我们需要重复的写用例,这样会使我们的用例变得很长,冗余,很多地方需要编码。参数化可以通过修改传入的参数,从而让相同步骤的用例可以多次执行,对测试用例进行迭代调用。
 

参数化设置

一:使用装饰器实现参数化设置

参数化需要用到pytest的装饰器:@pytest.mark.parametrize()

 方法:parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)

 

 

上栗子,所有内容均已微博的账号密码登录作为例子

1.传入一个参数,一个参数对应一个数值

import pytest
 
classTestAccountLogin:
 
    # 参数化:传入一个参数,一个参数对应一个值    @pytest.mark.parametrize("account", ["123123231321313"])deftest_one(self, account):
        pwd = "asdfgh"
        self.account_login_page.input_account_pwd(account, pwd)
        print("\na的值:", account)
复制代码

运行结果为:

 

2.传入两个参数,一个参数对应一个数值

import pytest
 
classTestAccountLogin:
 
    # 参数化:传入两个参数,一个参数对应一个值    @pytest.mark.parametrize("account, pwd", [("123123231321313", "asfgh")])deftest_one(self, account, pwd):
        self.account_login_page.input_account_pwd(account, pwd)
	print("\naccount的值:", account, "\npwd的值:", pwd)
复制代码

运行结果为:

 

3.传入两个参数,一个参数对应多个数值

import pytest
 
classTestAccountLogin:
 
    # 参数化:传入两个参数,一个参数对应两个值    @pytest.mark.parametrize("account, pwd", [
        ("123123231321313", "asdfgh"),
        ("12345645612", "123123")
    ])deftest_one(self, account, pwd):
        self.account_login_page.input_account_pwd(account, pwd)
	print("\naccount的值:", account, "\npwd的值:", pwd)
复制代码

运行结果为;

 注意:@pytest.mark.parametrize()装饰器的第一个参数是字符串的形式来表示用例函数的参数,第二个参数以列表或元组的形式传递测试数据,且装饰器的参数与传入用例函数中的参数是一致的。

4.要获得多个参数化参数的所有组合,可以堆叠 parametrize装饰器

import pytest
 
classTestAccountLogin:
    # 所有参数的组合    @pytest.mark.parametrize("account", ["123123123123", "1456456456456", "1789789789789"])    @pytest.mark.parametrize("pwd", ["we", "you", "he"])deftest_one(self, account, pwd):
        self.account_login_page.input_account_pwd(account, pwd)
        print("\naccount的值:", account, "\npwd的值:", pwd)
复制代码

运行结果为:

 

注意:如上图,可知所有参数的组合是将参数1的数据分别于参数2的所有数据进行组合配对

二:参数化读取内部列表数据

在测试类中建立数据列表,存放参数对应的数据。这种方法将每个测试类中涉及到的参数数据都写在类的内部,在运行时可以快速方便的修改参数数据。

import pytest
 
# 建立数据列表,存放传入参数对应的数据
data = [("w124hhh77", "111"),
        ("q123457gg", "222"),
        ("rdde54sds", "333")
       ]
 
classTestAccountLogin:
    # 参数化数据读取内部列表数据    @pytest.mark.parametrize("account, pwd", data)deftest_one(self, account, pwd):
        self.account_login_page.input_account_pwd(account, pwd)
        assert self.account_login_page.get_bounced_context() == "你尚未注册微博,是否立即注册"复制代码

运行结果为:

 

三:参数化读取自外部yaml文件

使用参数化读取外部yaml文件,只需要维护数据文件,不需要在代码中改动数据,就可以动态的增加新的测试用例数据。

要读取外部的yaml文件,需要先安装yaml的包,命令行输入:pip install pyyaml,安装成功后如下图所示。在PyCharm中安装的话,是在File→setting,搜索pytest intrepreter,点击“+”号,搜索PyYAML,安装即可。

 首先在工程目录(即测试类外部)下创建一个.yaml文件

 在yaml文件中设置传入的参数对应数值

 测试类中实现参数化读取外部yaml文件

import pytest
import yaml
 
classTestAccountLogin:
    # 在初始化前面先获取yaml文件
    account_data = yaml.safe_load(open("E:\\study\\Fork\\WeiboDemo\\Weibo\\data\\account_login.yaml", "r"))
    print(account_data)
 
    # 参数化数据读取外部文件yaml    @pytest.mark.parametrize("account, pwd", account_data)deftest_two(self, account, pwd):
        self.account_login_page.input_account_pwd(account, pwd)
        assert self.account_login_page.get_bounced_context() == "你尚未注册微博,是否立即注册"复制代码

运行结果为:

 这边在打开yaml文件时使用相对路径会出现No such file or directory: 'account_login.yaml‘的错误,需要使用绝对路径,不知道是什么原因,大神有空的话可以帮忙提点下吗?谢谢!!!

如果你还有许多困惑,那么我整理的视频资源和文档会是你的良师益友,或许可以给你带来一些实际性的帮助与突破【保证100%免费】
 

 

Appium是一个用于移动应用自动化测试的开源工具,而Pytest是一个Python测试框架。结合使用AppiumPytest,可以搭建一个强大的移动应用自动化测试框架。 使用AppiumPytest进行自动化测试时,首先需要安装AppiumAppium Python客户端。然后,编写测试脚本,可以使用Pytest提供的各种断言和测试装置。 下面是一个简单的例子,演示了如何使用AppiumPytest进行自动化测试: ```python import pytest from appium import webdriver @pytest.fixture def driver(): desired_caps = { 'platformName': 'Android', 'deviceName': 'your_device_name', 'appPackage': 'your_app_package', 'appActivity': 'your_app_activity' } driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) yield driver driver.quit() def test_login(driver): # 执行登录操作 # ... # 使用Pytest进行断言 assert driver.find_element_by_id('login_success_element').is_displayed() def test_logout(driver): # 执行退出操作 # ... # 使用Pytest进行断言 assert driver.find_element_by_id('logout_success_element').is_displayed() ``` 在上面的例子中,我们使用了`@pytest.fixture`装饰器来创建一个测试驱动程序实例。通过将`driver`作为参数传递给测试函数,我们可以在每个测试用例中共享同一个驱动程序实例。 然后,我们编写了两个测试函数`test_login`和`test_logout`,分别测试登录和退出功能。在每个测试函数中,我们使用Appium提供的API执行相应的操作,并使用Pytest提供的断言来验证测试结果。 最后,使用Pytest运行测试脚本即可进行自动化测试。 需要注意的是,上述示例代码只是一个简单的示例,实际项目中可能需要更复杂的操作和断言。同时,还可以结合其他的测试工具和框架,例如Allure报告、数据驱动等,来提升测试效果和维护性。 希望以上信息对你有帮助!如有更多问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值