网站空间分销东莞市建设监督网站首页

张小明 2026/3/2 22:56:41
网站空间分销,东莞市建设监督网站首页,做网站找客户,做跨境电商的血泪教训一、整体结构 框架组成#xff1a;pytestrequestsallure 设计模式#xff1a; 关键字驱动 项目结构#xff1a; 工具层#xff1a;api_keyword/ 参数层#xff1a;params/ 用例层#xff1a;case/ 数据驱动#xff1a;data_driver/ 数据层#xff1a;data/ 逻…一、整体结构框架组成pytestrequestsallure设计模式关键字驱动项目结构工具层api_keyword/参数层params/用例层case/数据驱动data_driver/数据层data/逻辑层logic/二、具体步骤及代码1、工具层将get、post等常用行为进行二次封装。代码api_key.py如下import allure import json import jsonpath import requests # 定义一个关键字类 class ApiKey: # 将get请求行为进行封装 allure.step(发送get请求) def get(self, url, paramsNone, **kwargs): return requests.get(urlurl, paramsparams, **kwargs) # 将post请求行为进行封装 allure.step(发送post请求) def post(self, url, dataNone, **kwargs): return requests.post(urlurl, datadata, **kwargs) # 由于接口之间可能相互关联因此下一个接口需要上一个接口的某个返回值此处采用jsonpath对上一个接口返回的值进行定位并取值 allure.step(获取返回结果字典值) def get_text(self, data, key): # json数据转换为字典 json_data json.loads(data) # jsonpath取值 value jsonpath.jsonpath(json_data, $..{0}.format(key)) return value[0]其中引用allure.step()装饰器进行步骤详细描述使测试报告更加详细。使用jsonpath对接口的返回值进行取值。2、数据层数据采用yaml文件。代码user.yaml如下- user: username: admin password: 123456 msg: success title: 输入正确账号、密码登录成功 - user: username: admin1 password: 1234561 msg: 用户名或密码错误 title: 输入错误账号1、密码1登录失败 - user: username: admin2 password: 1234562 msg: 用户名或密码错误 title: 输入错误账号2、密码2登录失败其中title是为了在用例进行时动态获取参数生成标题。3、数据驱动层对数据进行读写。代码yaml.driver.py如下:import yaml def load_yaml(path): file open(path, r, encodingutf-8) data yaml.load(file, Loaderyaml.FullLoader) return data4、参数层参数层存放公共使用的参数在使用时对其进行调用。代码allParams.py如下 规则 全局变量使用大写字母表示 # 地址 URL http://39.98.138.157: # 端口 PORT 50005、逻辑层用例一进行登录的接口请求此处登录请求在yaml文件里设置了三组不同的数据进行请求。用例二进行个人查询的接口请求此处需要用到登录接口返回的token值。用例三、进行添加商品到购物车的接口请求此处需要用到登录接口返回的token值以及个人查询接口返回的openid、userid值用例四、进行下单的接口请求此处需要用到登录接口返回的token值以及个人查询接口返回的openid、userid、cartid值注意由于多数接口需要用到登录接口返回的token值因此封装一个conftest.py定义项目级前置fixture在整个项目只执行一次可以在各个用例中进行调用其他共用参数也可以采取类似前置定义。同时由于此处定义的项目级fixture因此可以将初始化工具类ak ApiKey()也放入其中。代码conftest.py如下from random import random import allure import pytest from pytest_demo_2.api_keyword.api_key import ApiKey from pytest_demo_2.params.allParams import * def pytest_collection_modifyitems(items): 测试用例收集完成时将收集到的item的name和nodeid的中文显示在控制台上 for item in items: item.name item.name.encode(utf-8).decode(unicode_escape) item._nodeid item.nodeid.encode(utf-8).decode(unicode_escape) # 项目级fix整个项目只初始化一次 pytest.fixture(scopesession) def token_fix(): # 初始化工具类 ak ApiKey() with allure.step(发送登录接口请求并获取token整个项目只生成一次): # 请求接口 # url http://39.98.138.157:5000/api/login url URL PORT /api/login # 请求参数 userInfo { username: admin, password: 123456 } # post请求 res ak.post(urlurl, jsonuserInfo) # 获取token token ak.get_text(res.text, token) # 验证代码验证token只生成一次 token_random random() return ak, token, res, token_random其中也包含了防止中文乱码加入了pytest_collection_modifyitems函数。设置好conftest后就可以应用在逻辑层里面了。代码shopingApi.py如下import pytest import allure from pytest_demo_2.api_keyword.api_key import ApiKey from pytest_demo_2.params.allParams import * class ApiCase(): # 登录逻辑 def params_login(self, userdata): # 动态获取参数生成标题 allure.dynamic.title(userdata[title]) # 初始化工具类 ak ApiKey() # 请求接口 url URL PORT /api/login # 请求参数 userInfo { username: userdata[user][username], password: userdata[user][password] } res ak.post(urlurl, jsonuserInfo) with allure.step(接口返回信息校验及打印): print(/api/login登录接口请求响应信息) print(res.text) # 获取响应结果 msg ak.get_text(res.text, msg) print(msg) # 断言 assert msg userdata[msg] def params_getuserinfo(self, token_fix): # 从fix中获取预置的工具类和token,所有返回值都需要接收 ak, token, res, token_random01 token_fix with allure.step(发送个人查询接口请求): url URL PORT /api/getuserinfo headers { token: token } res1 ak.get(urlurl, headersheaders) with allure.step(接口返回信息校验及打印): print(/api/getuserinfo个人用户查询接口请求响应信息) print(res1.text) # print(验证的random值测试用) # print(token_random01) name ak.get_text(res1.text, nikename) # 断言 assert 风清扬 name return res1 def params_addcart(self, token_fix): # 从fix中获取预置的工具类和token # 所有返回都要获取不然会报错 ak, token, res, token_random01 token_fix with allure.step(调用getuserinfo接口获取返回信息): res1 self.params_getuserinfo(token_fix) with allure.step(发送添加商品到购物车请求): # 添加商品到购物车,基于token、userid、openid、productid url URL PORT /api/addcart hd { token: token } data { userid: ak.get_text(res1.text, userid), openid: ak.get_text(res1.text, openid), productid: 8888 } # 发送请求 res2 ak.post(urlurl, headershd, jsondata) with allure.step(接口返回信息校验及打印): print(/api/addcart添加商品到购物车请求响应信息) print(res2.text) # print(验证的random值测试用) # print(token_random01) result ak.get_text(res2.text, result) assert success result return res2 def params_createorder(self, token_fix): ak, token, res, token_random01 token_fix with allure.step(调用addcart接口获取返回信息): res1 self.params_addcart(token_fix) with allure.step(发送下单请求): url URL PORT /api/createorder # 从项目级fix中获取token hd { token: token } # 从添加商品到购物车接口中获取userid,openid,cartid data { userid: ak.get_text(res1.text, userid), openid: ak.get_text(res1.text, openid), productid: 8888, cartid: ak.get_text(res1.text, cartid) } res2 ak.post(urlurl, headershd, jsondata) with allure.step(接口返回信息校验及打印): print(/api/createorder下单请求响应信息) print(res2.text) # print(验证的random值测试用) # print(token_random01) result ak.get_text(res1.text, result) assert success result6、用例层调用逻辑层进行用例管理和数据传输。代码test_Tree.py如下import allure import pytest from pytest_demo_2.data_driver import yaml_driver from pytest_demo_2.logic.shopingApi import ApiCase allure.epic(shopXo电商平台接口-接口测试) class TestTree(): # 初始化用例库 actions1 ApiCase() allure.feature(01.登陆) allure.story(02.一般场景) pytest.mark.parametrize(userdata, yaml_driver.load_yaml(./data/user.yaml)) def test_case01(self, userdata): self.actions1.params_login(userdata) allure.feature(02.个人查询) allure.story(01.典型场景) allure.title(个人查询) def test_case02(self, token_fix): self.actions1.params_getuserinfo(token_fix) allure.feature(03.添加商品到购物车) allure.story(01.典型场景) allure.title(添加商品到购物车) def test_case03(self, token_fix): self.actions1.params_addcart(token_fix) allure.feature(04.下单) allure.story(01.典型场景) allure.title(下单) def test_case04(self, token_fix): self.actions1.params_createorder(token_fix)7、运行代码main_run.py如下import os import pytest def run(): pytest.main([-v, ./case/test_Tree.py, --alluredir, ./result, --clean-alluredir]) os.system(allure serve result) # os.system(allure generate ./result/ -o ./report_allure/ --clean) if __name__ __main__: run()128、结果总结感谢每一个认真阅读我文章的人作为一位过来人也是希望大家少走一些弯路如果你不想再体验一次学习时找不到资料没人解答问题坚持几天便放弃的感受的话在这里我给大家分享一些自动化测试的学习资源希望能给你前进的路上带来帮助。软件测试面试文档我们学习必然是为了找到高薪的工作下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料并且有字节大佬给出了权威的解答刷完这一套面试资料相信大家都能找到满意的工作。视频文档获取方式这份文档和视频资料对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴我走过了最艰难的路程希望也能帮助到你以上均可以分享点下方小卡片即可自行领取。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

外国购物网站大全石家庄网站开发哪家好

FaceFusion如何处理快速缩放镜头中的人脸?在影视级视觉特效与实时AI换脸技术的交汇点上,一个看似简单却极具挑战性的场景正不断考验着算法的极限——摄像机突然拉近,从远景迅速推进到人物面部特写。这种快速缩放镜头(rapid zoom-i…

张小明 2025/12/25 2:47:39 网站建设

国外网站赏析世界500强企业平均寿命

跨平台C#代码实验神器:RoslynPad终极指南 【免费下载链接】roslynpad 项目地址: https://gitcode.com/gh_mirrors/ros/roslynpad RoslynPad是一款革命性的跨平台C#代码实验工具,基于微软Roslyn编译器和AvalonEdit编辑器构建,为开发者…

张小明 2025/12/23 19:48:07 网站建设

大连无网站的企业有哪些佛山如何网站建设在哪里做

微服务安全架构:OAuth2与API网关的现代化集成方案 【免费下载链接】spring-security Spring Security 项目地址: https://gitcode.com/gh_mirrors/spr/spring-security 你是否正在为微服务架构中的身份认证与授权而头疼?🤔 分布式环境…

张小明 2025/12/25 7:34:19 网站建设

陕西建设银行网站wordpress 站群系统

终极指南:免费获取卓里奇数学分析教材PDF完整资源 【免费下载链接】数学分析卓里奇经典的俄罗斯教材第二册PDF资源介绍 《数学分析(卓里奇)经典的俄罗斯教材(第二册)》PDF资源库为您提供了一部享誉全球的数学经典教材。…

张小明 2025/12/24 0:28:55 网站建设

电商优惠券网站 建设安徽教育机构网站建设

新能源汽车 电力系统 优化 基于粒子群算法的电动汽车群有序充电优化 设计简介:解决与电动汽车充电站的电力分配相关的问题。 通过使用粒子群优化(PSO)算法,为电动汽车充电站找到最优的充电策略,以最小化电网的总费用和…

张小明 2025/12/26 5:44:51 网站建设

做论坛网站怎么赚钱吗福田区住房和建设局官方网站

15亿参数打破多模态割裂!字节开源Tar-1.5B开创统一新范式 【免费下载链接】Tar-1.5B 项目地址: https://ai.gitcode.com/hf_mirrors/ByteDance-Seed/Tar-1.5B 导语 字节跳动Seed团队开源的Tar-1.5B多模态模型,通过"视觉即方言"创新理…

张小明 2025/12/25 16:21:05 网站建设