POM+数据驱动+pytest
POM+数据驱动+pytest
数据驱动:将测试过程中所有测试数据,进行提取、保存以及管理,提升框架的可维护性,一般情况下会使用到的数据类型:Excel、yaml、json、py......,如:登录场景,需要测试 超长字符串、必填项不填写、账户/密码错误等,使用数据驱动就可以实现同一个用例步骤,搭配不同的数据验证不同的场景,一套用例使用不同的数据,就可以多次的测试,让用例代码可以复用,而不是使用一次就需要在写一次代码。
1、yaml数据驱动
——yaml就是一个文件,类似于xml,可以在Pycharm中直接创建后缀为yaml的文件,需要使用到list、字典,yaml就可以生成,方便配置数据、调用数据。
安装: pip install pyyaml
yaml应用:
- ‘ - ’ list标签
- ‘ :' dict标签
目录:
baidu_page.py
from base import BasePage """ baidu_page.py文件是用来存储百度页面 """ #创建BaiduPage类继承BasePage class BaiduPage(BasePage): #定义url变量,供父类中的open()方法使用 url = "http://www.baidu.com" #文本定位,并输入关键字 def search_input(self,search_key): #使用父类locator方法来定位元素 #比原生的selenium更加精简 self.locator("id","kw").send_keys(search_key) #按钮定位,并点击 def search_button(self): self.locator("id","su").click()
yaml_driver.py
import yaml def load_yaml(path): file = open(path,'r',encoding='utf-8') data = yaml.load(file,yaml.FullLoader)#读取yaml文件,yaml.FullLoader加载完整的yaml文件,避免代码的任意执行 return data
baidu.yaml
-
txt: 狗狗币
-
txt: selenium
-
txt: pytest
test_param.py——这里我们可以看出优化到了只有一个执行用例的代码
import pytest from selenium import webdriver from baidu_page import BaiduPage from time import sleep from demo.data import yaml_driver class Test_Baidu(): # 环境准备 @classmethod def setup_class(cls): cls.driver = webdriver.Chrome() """
1、因为这3个用例步骤一模一样,因此我们可以使用数据驱动来简化代码 将3个用例合并成2个,搭配数据驱动仍然可以执行3次 2、需要数据驱动的测试用例:数据驱动可以以函数的形式将结果生成并返回 """ @pytest.mark.parametrize('data',yaml_driver.load_yaml('../data/baidu.yaml')) def test_baidu_search_case01(self,data): page = BaiduPage(self.driver) # 使用BaiduPage基类,以及继承的父类的方法,就可以直接使用了 page.open() # 在BaiduPage中已经配置url了,这里就不需要配置了 page.search_input(data['txt']) page.search_button() sleep(2) assert self.driver.title == "%s_百度搜索"%data['txt'] # 环境清理 @classmethod def teardown_class(cls): cls.driver.quit() # 退出浏览器 if __name__ == '__main__': pytest.main(['-s', 'test_param.py'])
结果:
============================= test session starts ============================= platform win32 -- Python 3.8.5, pytest-6.2.5, py-1.10.0, pluggy-1.0.0 rootdir: C:\Users\11130\PycharmProjects\pythonProject2\demo\data_driver plugins: forked-1.4.0, html-3.1.1, metadata-1.11.0, rerunfailures-10.2, xdist-2.5.0 collected 3 items test_param.py ... ============================= 3 passed in 12.01s ==============================
pytest框架写的用例
def test_list(self, config, web_session): # 商品列表页面list接口 key_id = config.get("business.KeyId") key_secret = config.get("business.KeySecret") request = JsonObject() request.storeId = config.get("storeId") sign_nodejs_request_package(request, key_id, key_secret) url_list = '/v1/list' resp, data = web_session.get(url_list, params=request, cookies=getattr(SetAndGet_obj, 'cookies_v1')) print('cookies_v1的值是', getattr(SetAndGet_obj, 'cookies_v1')) if resp.status_code == 200: print('v1_list接口请求成功') assert resp and resp.status_code == 200 assert data.requestId assert data.exportRedeemPoints == True, "返回:False,说明XXXXX"
本文来自博客园,作者:他还在坚持嘛,转载请注明原文链接:他还在坚持嘛 https://www.cnblogs.com/brf-test/p/15759174.html