当前位置: 首页 > news >正文

seo人员要先对网站进行诊断厦门网站建设哪好

seo人员要先对网站进行诊断,厦门网站建设哪好,网站图片展示方式,个人网站有什么缺点Pytest学习笔记 1、介绍 1.1、单元测试 单元测试是指在软件开发当中#xff0c;针对软件的最小单位#xff08;函数#xff0c;方法#xff09;进行正确性的检查测试 1.2、单元测试框架 测试发现#xff1a;从多个py文件里面去找到我们测试用例测试执行#xff1a;按…Pytest学习笔记 1、介绍 1.1、单元测试 单元测试是指在软件开发当中针对软件的最小单位函数方法进行正确性的检查测试 1.2、单元测试框架 测试发现从多个py文件里面去找到我们测试用例测试执行按照一定的顺序和规则去执行。并生成结果测试判断通过断言判断预期结果和实际结果的差异测试报告统计测试进度耗时通过率生成测试报告 1.3、自动化测试框架 针对一个项目开发的一个代码框架这个框架封装了很多的基础模块报告模块等等 1.4、Pytest pytest可以和seleniumrequestsappium结合实现web自动化接口自动化app自动化 pytest可以实现测试用例的跳过以及reruns失败用例重试 pytest可以和allure生成非常美观的测试报告 pytest可以和Jenkins持续集成 pytest有很多非常强大的插件并且这些插件能够实现很多的实用的操作 pytest pytest-xdist 测试用例分布式执行多CPU分发pytest-ordering 用于改变测试用例的执行顺序从上到下pytest-rerunfailures 用例失败后重跑 pytest-html 生成html格式的自动化测试报告allure-pytest 用于生成美观的测试报告 2、快速入门 2.1、Pytest约定 模块名必须以test_开头或者_test结尾 测试类必须以Test开头并且不能有init方法 测试方法必须以test开头 pytest pytest-xdist pytest-ordering pytest-rerunfailures pytest-html allure-pytest requests2.2、安装依赖 安装插件时可以通过将要安装的插件卸载requirements.txt中进行快速进行安装 2.3、运行方式 main.py import pytestif __name__ __main__:# pytest.main()test_demo1.py class Test_Demo1_C1:def test_01(self):print(hello world!)test_demo2.py class Test_Demo1_C2:def test_02(self):print(hello world!2)test_demo3.py class Test_Demo1_C3:def test_03(self):print(hello world!3)test_demo4.py class Test_Demo1_C4:def test_04(self):print(hello world!4)test_demo5.py class Test_Demo1_C4:def test_05(self):print(hello world!5)test_demo7.py import timeclass Test_Demo1_C6:def test_06(self):time.sleep(5)print(hello world!6)class Test_Demo1_C7:def test_07(self):time.sleep(5)print(hello world!7)test_demo8.py import timeclass Test_Demo1_C8:def test_08(self):time.sleep(5)print(hello world!8)test_demo9.py class Test_Demo1_C9:def test_09(self):print(hello world!9)def test_10(self):print(hello world!10)def test_11(self):print(hello world11)assert 1 ! 1def test_12(self):print(hello world12)1、主函数模式 运行所有 import pytestif __name__ __main__:pytest.main()指定包运行 import pytestif __name__ __main__:pytest.main([./pytest-demo]) # 运行指定包指定模块运行 import pytestif __name__ __main__:pytest.main([./pytest-demo1/test_demo3.py]) # 运行指定模块pytest.main([./pytest-demo1/test_demo3.py,./pytest-demo1/test_demo4.py])指定nodeid运行 import pytestif __name__ __main__:pytest.main([./pytest-demo1/test_demo5.py::Test_Demo1_C5::test_05]) # 运行指定nodeid2、命令行模式 运行所有 pytest指定包运行 pytest ./pytest-demo指定模块运行 pytest ./pytest-demo/test_demo3.py pytest ./pytest-demo/test_demo3.py ./pytest-demo1/test_demo4.py指定nodeid运行 pytest ./pytest-demo1/test_demo5.py::Test_Demo1_C5::test_053、配置文件模式 读取pytest.ini全局配置文件运行 pytest.ini需要时ANSI编码或者GBK [pytest] # 命令行参数用空格进行分隔 addopts -vs# 测试用例的路径 ./为pytest.ini当前目录下的同级文件夹 testpaths ./pytest_demo# 模块名的规则配置测试搜索的模块文件名称 python_files test_*.py # 类名的规则配置测试搜索的测试类名 python_classes Test* # 方法名的规则配置测试搜索的测试函数名 python_functions test4、参数详解 -s:输出调试信息包括print打印的信息 -v:详细的信息 -vs:详细的信息,输出调试信息包括print打印的信息 -n:多线程在命令行中-n参数分割符为空格主函数中-n参数分隔符为 –reruns:失败重试在命令行中–reruns参数分割符为空格主函数中–reruns参数分隔符为 -k:运行带指定关键字的 2.4、执行顺序 默认执行顺序从上到下依次执行 可以使用pytest.mark.run(orderx)改变执行顺序数字越小越先执行 test_demo13.py import pytestclass Test_Demo1_C13:pytest.mark.run(order1)def test_013(self):print(hello world!13)pytest.mark.run(order4)def test_14(self):print(hello world!14)pytest.mark.run(order2)def test_15(self):print(hello world15)pytest.mark.run(order3)def test_16(self):print(hello world16)2.5、冒烟测试 1、单组 test_demo14.py import pytestclass Test_Demo1_C14:pytest.mark.smokedef test_017(self):print(hello world!17)pytest.mark.xumengdef test_18(self):print(hello world!18)def test_19(self):print(hello world19)def test_20(self):print(hello world20) test_demo15.py import pytestclass Test_Demo1_C15:pytest.mark.smokedef test_017(self):print(hello world!17)pytest.mark.xumengdef test_18(self):print(hello world!18)def test_19(self):print(hello world19)def test_20(self):print(hello world20) pytest.ini [pytest] # 命令行参数用空格进行分隔 addopts -vs -msmoke# 测试用例的路径 ./为pytest.ini当前目录下的同级文件夹 testpaths ./pytest-demo5# 模块名的规则配置测试搜索的模块文件名称 python_files test_*.py # 类名的规则配置测试搜索的测试类名 python_classes Test* # 方法名的规则配置测试搜索的测试函数名 python_functions test# 冒烟测试 markers smoke:冒烟测试2、多组 [pytest] # 命令行参数用空格进行分隔 addopts -vs -msmoke or xumeng# 测试用例的路径 ./为pytest.ini当前目录下的同级文件夹 testpaths ./pytest-demo5# 模块名的规则配置测试搜索的模块文件名称 python_files test_*.py # 类名的规则配置测试搜索的测试类名 python_classes Test* # 方法名的规则配置测试搜索的测试函数名 python_functions test# 冒烟测试 markers smoke:冒烟测试xumeng:测试2.6、跳过用例 1、无条件跳过 test_demo16.py import pytestclass Test_Demo1_C16:age 18pytest.mark.skip(reason任性)def test_021(self):print(hello world!21)def test_22(self):print(hello world!22)def test_23(self):print(hello world23)pytest.ini [pytest] # 命令行参数用空格进行分隔 addopts -vs# 测试用例的路径 ./为pytest.ini当前目录下的同级文件夹 testpaths ./pytest-demo6# 模块名的规则配置测试搜索的模块文件名称 python_files test_*.py # 类名的规则配置测试搜索的测试类名 python_classes Test* # 方法名的规则配置测试搜索的测试函数名 python_functions test2、有条件跳过 test_demo16.py import pytestclass Test_Demo1_C16:age 18pytest.mark.skip(reason任性)def test_021(self):print(hello world!21)pytest.mark.skipif(age ! 18, reason任性)def test_22(self):print(hello world!22)pytest.mark.skipif(age 18, reason任性)def test_23(self):print(hello world23)pytest.ini [pytest] # 命令行参数用空格进行分隔 addopts -vs# 测试用例的路径 ./为pytest.ini当前目录下的同级文件夹 testpaths ./pytest-demo6# 模块名的规则配置测试搜索的模块文件名称 python_files test_*.py # 类名的规则配置测试搜索的测试类名 python_classes Test* # 方法名的规则配置测试搜索的测试函数名 python_functions test2.7、生成报告 [pytest] # 命令行参数用空格进行分隔 addopts -vs --html ./report/report.html# 测试用例的路径 ./为pytest.ini当前目录下的同级文件夹 testpaths ./pytest-demo6# 模块名的规则配置测试搜索的模块文件名称 python_files test_*.py # 类名的规则配置测试搜索的测试类名 python_classes Test* # 方法名的规则配置测试搜索的测试函数名 python_functions test3、前后置处理固件夹具 3.1、基本用法 def setup_module(self):print(测试模块运行前执行一次)def teardown_module(self):print(测试模块运行后执行一次)class Test_Demo:def setup_class(self):print(测试类运行前执行一次)def setup_method(self):print(测试函数运行前执行一次)def test_demo1(self):print(hello )def test_demo2(self):print(world )def teardown_method(self):print(测试函数运行后执行一次)def teardown_class(self):print(测试类运行后执行一次)class Test_Demo1:def setup_class(self):print(测试类运行前执行一次1)def setup_method(self):print(测试函数运行前执行一次1)def test_demo1(self):print(hello )def test_demo2(self):print(world )def teardown_method(self):print(测试函数运行后执行一次1)def teardown_class(self):print(测试类运行后执行一次1)3.2、装饰器 pytest.fixture(scope“”,params“”,autouseBoolean,ids“”,name“”) 1、基础使用scope、autouse scope也支持session import pytestpytest.fixture(scopemodule, autouseTrue) def module_fixture():print(测试模块运行前执行一次)yieldprint(测试模块运行后执行一次)pytest.fixture(scopeclass, autouseTrue) def class_fixture():print(测试类运行前执行一次)yieldprint(测试类运行后执行一次)pytest.fixture(scopefunction, autouseTrue) def function_fixture():print(测试函数运行前执行一次)yieldprint(测试函数运行后执行一次)class Test_Demo:def test_demo1(self):print(hello)def test_demo2(self):print(world)class Test_Demo1:def test_demo3(self):print(HELLO)def test_demo4(self):print(WORLD)2、参数化params、ids import pytestpytest.fixture(scopefunction, params[T1, T2, T3]) def function_fixture(request):print(测试函数运行前执行一次)yield request.paramprint(测试函数运行后执行一次)class Test_Demo:def test_demo1(self):print(hello)def test_demo2(self, function_fixture):print(WORLD, function_fixture)import pytestpytest.fixture(scopefunction, params[T1, T2, T3], ids[t1, t2, t3]) def function_fixture(request):print(测试函数运行前执行一次)yield request.paramprint(测试函数运行后执行一次)class Test_Demo:def test_demo1(self):print(hello)def test_demo2(self, function_fixture):print(WORLD, function_fixture)3、别名 import pytestpytest.fixture(scopefunction, params[T1, T2, T3], ids[t1, t2, t3],nameGGC) def function_fixture(request):print(测试函数运行前执行一次)yield request.paramprint(测试函数运行后执行一次)class Test_Demo:def test_demo1(self):print(hello)def test_demo2(self, GGC):print(WORLD, GGC)4、conftest.py conftest.py文件是单独存放的一个夹具配置文件名称是不能更改 可以在不同的py文件中使用同一个fixture函数 原则上conftest.py需要和运行的用例放到同一层但是其实可以访问上层的conftest.py conftest.py的fixture函数使用时也是有先后顺序的 4、接口测试 支持HTTP连接保持和连接池 支持使用cookie保持会话 支持文件上传 支持自动确定响应内容的编码 支持国际化的 URL 和 POST 数据自动编码 4.1、request 1、get requests.get(url, paramsNone, **kwargs) url:接口地址 params:传参通过url之后以?传参多个参数之间用分隔 **kwargs可变长度的字典 import pytest import requestsclass TestDemo1:access_token # 获取tokendef test_1(self):data {grant_type: client_credential,appid: wx4a3a215280b8f14a,secret: 2609941fb2b5d8aaea637a1d430cab222}response requests.get(https://api.weixin.qq.com/cgi-bin/token, data)print(response.json())TestDemo1.access_token response.json()[access_token]print(TestDemo1.access_token)2、post requests.post(url, dataNone, jsonNone, **kwargs) url:接口地址 data:表单 json:json数据 files:文件上传 import osimport pytest import requestsclass TestDemo1:access_token # 获取tokendef test_1(self):data {grant_type: client_credential,appid: wx4a3a215280b8f14a,secret: 2609941fbb5d8aaea637a1d430cab222}response requests.get(https://api.weixin.qq.com/cgi-bin/token, data)print(response.json())TestDemo1.access_token response.json()[access_token]print(TestDemo1.access_token)# 创建标签pytest.mark.skipdef test_2(self):json {tag: {name: xumeng}}response requests.post(https://api.weixin.qq.com/cgi-bin/tags/create?access_token TestDemo1.access_token,jsonjson)print(response.json())# 获取所有标签def test_3(self):json {tag: {name: xumeng}}response requests.post(https://api.weixin.qq.com/cgi-bin/tags/get?access_token TestDemo1.access_token,jsonjson)print(response.json())# 上传文件def test_4(self):# print(os.getcwd())files {media: open(./Luoyang.jpg, rb) # 路径起点为项目根目录}response requests.post(https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token TestDemo1.access_token,filesfiles)print(response.json()) 3、put requests.put(url, dataNone, **kwargs) url:接口地址 data:表单 4、delete requests.delete(url, **kwargs) url:接口地址 5、request requests.request(method, url, **kwargs) method:请求方式 url:请求路径 **kwargs: params:get请求传参data:post请求传参headers:请求头cookies:cookiefiles:文件auth:授权timeoutNoneallow_redirectsTrueproxies:代理hooksNonestreamNoneverify:SSL证书检验certNonejson:post请求传参 4.2、response res.text:返回字符串的响应数据 res.content:返回字节响应数据bytes res.json():返回字典格式的响应数据 res.status_code:返回状态码 res.reason:返回状态信息 res.cookies:返回cookie信息 res.encoding:返回编码格式 res.headers:返回响应头 res.request.url:返回请求路径 res.request.headers:返回请求头 res.request.body:返回请求数据 res.request.method:返回请求方式 4.3、cookie 4.4、session 5、allure 生成pytest测试报告 下载地址https://github.com/allure-framework/allure2/releases 验证是否成功allure --version 5.1、临时报告 [pytest] # 命令行参数用空格进行分隔 addopts -vs --alluredir./report --clean-alluredir# 测试用例的路径 ./为pytest.ini当前目录下的同级文件夹 testpaths ./request-demo# 模块名的规则配置测试搜索的模块文件名称 python_files test_*.py # 类名的规则配置测试搜索的测试类名 python_classes Test* # 方法名的规则配置测试搜索的测试函数名 python_functions test5.2、正式报告 import os import timeimport pytestif __name__ __main__:pytest.main()time.sleep(3)os.system(allure generate ./temp -o ./report --clean)6、数据驱动 6.1、基础使用 import pytestclass TestDemo1:pytest.mark.parametrize(team, [T1, RNG, LNG, FPX, UP, FNC, C9])def test_1(self, team):print(我喜欢的英雄联盟队伍, team)import pytestclass TestDemo1:pytest.mark.parametrize(team, [{teamName:T1,teamMember:Faker}, {teamName:RNG,teamMember:UZI}])def test_1(self, team):print(我喜欢str(team[teamName])队伍的str(team[teamMember]))import pytestclass TestDemo1:pytest.mark.parametrize(teamMember1,teamMember2, [[faker, 宙斯], [UZI, Ming]])def test_1(self, teamMember1, teamMember2):print(我喜欢的选手: str(teamMember1) 和 str(teamMember2))6.2、yaml yaml详解https://blog.csdn.net/gyfghh/article/details/119465409 1、yaml读取 yaml -name: zhangsanage: 20money: 123.5hobbies: baskball,football,volleyballbooks:- book1- book2- book3lotteries: [lottery1,lottery2,lottery3]bankcards: {ICBC: 123456789,ABC: 987654321}pet:name: huahuaage: 2 -name: lisiage: 20money: 123.5hobbies: baskball,football,volleyballbooks:- book1- book2- book3lotteries: [lottery1,lottery2,lottery3]bankcards: {ICBC: 123456789,ABC: 987654321}pet:name: huahuaage: 2安装依赖 pip install pyyamlload_yaml.py import yamldef load_yaml(path):with open(path, moder, encodingutf-8) as file:return yaml.load(streamfile, Loaderyaml.FullLoader)test_demo1.py import load_yamlclass TestDemo1:def test_1(self):print(load_yaml.load_yaml(./request-demo/data.yaml))6.3、yaml配合parametrize -name: zhangsanage: 20money: 123.5hobbies: baskball,football,volleyballbooks:- book1- book2- book3lotteries: [lottery1,lottery2,lottery3]bankcards: {ICBC: 123456789,ABC: 987654321}pet:name: huahuaage: 2 -name: lisiage: 20money: 123.5hobbies: baskball,football,volleyballbooks:- book1- book2- book3lotteries: [lottery1,lottery2,lottery3]bankcards: {ICBC: 123456789,ABC: 987654321}pet:name: huahuaage: 2import pytest import load_yamlclass TestDemo1:pytest.mark.parametrize(person, load_yaml.load_yaml(./request-demo/data.yaml))def test_2(self, person):print(我的名字, person[name])
http://www.w-s-a.com/news/397104/

相关文章:

  • jsp网站建设模板下载十大免费excel网站
  • 网络公司网站图片网站建立好了自己怎么做优化
  • 云主机是不是可以搭建无数个网站百度快速seo优化
  • 房地产怎么做网站推广建立音乐网站
  • 川畅科技联系 网站设计网站开发的教学视频
  • 为什么学网站开发凡科登陆
  • 设计师常备设计网站大全中山精品网站建设信息
  • 杭州建设工程网seo服务是什么
  • 兼职做问卷调查的网站wordpress mysql设置
  • 怎么在百度上能搜到自己的网站山西seo谷歌关键词优化工具
  • 网站搭建免费模板飞鱼crm下载
  • 网站开发竞品分析app制作公司深圳
  • 网站建设ssc源码修复设计班级网站建设
  • 网站重定向凡科做网站不要钱
  • 佛山html5网站建设微信营销软件破解版
  • 网站单页做301南京百度推广
  • 私人做网站要多少钱展芒设计网页
  • 怎样网站制作设计如何在网上推广农产品
  • 做关键词排名卖网站聚名网
  • 吉林省住房城乡建设厅网站首页体育器材网站建设方案
  • 网站建设及维护专业手机金融界网站
  • 常州网站建设工作室建立网站有怎么用途
  • 如何盗取网站推广策划书模板
  • 游戏网站建设计划书网络开发需要学什么
  • 手机网站维护费网站开发包括网站过程
  • 懂做游戏钓鱼网站的网站建设技术的发展
  • 网站被百度收录百度一下你就知道 官网
  • 雅客网站建设做网站用什么做
  • 做宣传海报网站专业网站设计速寻亿企邦
  • 秦皇岛市住房和城乡建设局网站有关网站开发的参考文献