幼儿饰品瑜伽美体用品微软
投稿投诉
微软创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品

Python基础之pytest参数化

  pytest是目前比较成熟功能齐全的测试框架,使用率肯定也不断攀升。在实际
  工作中,许多测试用例都是类似的重复,一个个写最后代码会显得很冗余。这里,我们来了解一下
  pytest。mark。parametrize装饰器,可以很好的解决上述问题。源代码分析defparametrize(self,argnames,argvalues,indirectFalse,idsNone,scopeNone):Addnewinvocationstotheunderlyingtestfunctionusingthelistofargvaluesforthegivenargnames。Parametrizationisperformedduringthecollectionphase。Ifyouneedtosetupexpensiveresourcesseeaboutsettingindirecttodoitratherattestsetuptime。使用给定argnames的argValue列表向基础测试函数添加新的调用,在收集阶段执行参数化。:argargnames:acommaseparatedstringdenotingoneormoreargumentnames,oralisttupleofargumentstrings。参数名:使用逗号分隔的字符串,列表或元祖,表示一个或多个参数名:argargvalues:Thelistofargvaluesdetermineshowoftenatestisinvokedwithdifferentargumentvalues。Ifonlyoneargnamewasspecifiedargvaluesisalistofvalues。IfNargnameswerespecified,argvaluesmustbealistofNtuples,whereeachtupleelementspecifiesavalueforitsrespectiveargname。参数值:只有一个argnames,argvalues则是值列表。有N个argnames时,每个元祖对应一组argnames,所有元祖组合成一个列表:argindirect:Thelistofargnamesorboolean。Alistofargumentsnames(self,subsetofargnames)。IfTruethelistcontainsallnamesfromtheargnames。Eachargvaluecorrespondingtoanargnameinthislistwillbepassedasrequest。paramtoitsrespectiveargnamefixturefunctionsothatitcanperformmoreexpensivesetupsduringthesetupphaseofatestratherthanatcollectiontime。:argids:listofstringids,oracallable。Ifstrings,eachiscorrespondingtotheargvaluessothattheyarepartofthetestid。IfNoneisgivenasidofspecifictest,theautomaticallygeneratedidforthatargumentwillbeused。Ifcallable,itshouldtakeoneargument(self,asingleargvalue)andreturnastringorreturnNone。IfNone,theautomaticallygeneratedidforthatargumentwillbeused。Ifnoidsareprovidedtheywillbegeneratedautomaticallyfromtheargvalues。ids:字符串列表,可以理解成标题,与用例个数保持一致:argscope:ifspecifieditdenotesthescopeoftheparameters。Thescopeisusedforgroupingtestsbyparameterinstances。Itwillalsooverrideanyfixturefunctiondefinedscope,allowingtosetadynamicscopeusingtestcontextorconfiguration。如果指定,则表示参数的范围。作用域用于按参数实例对测试进行分组。它还将覆盖任何fixture函数定义的范围,允许使用测试上下文或配置设置动态范围。argnames
  释义:参数名称
  格式:字符串arg1,arg2,arg3aegvalues
  释义:参数值列表
  格式:必须是列表,如〔val1,val2,val3〕
  单个参数,里面是值的列表,如pytest。mark。parametrize(name,〔Jack,Locus,Bill〕)
  多个参数,需要用元祖来存放值,一个元祖对应一组参数的值,如pytest。mark。parametrize(user,age,〔(user1,15),(user2,24),(user3,25)〕)标识
  释义:可以理解为用例的id
  格式:字符串列表,如〔case1,case2,case3〕indirect
  释义:当indirectTrue时,若传入的argnames是fixture函数名,此时fixture函数名将成为一个可执行的函数,
  argvalues作为fixture的参数,执行fixture函数,最终结果再存入request。param;当indirectFalse时,fixture
  函数只作为一个参数名给测试收集阶段调用。
  备注:这里可以将thesetupphase(测试设置阶段)理解为配置conftest。py阶段,将thecollectionphase(
  测试收集阶段)理解为用例执行阶段。装饰测试类importpytestdata〔(2,2,4),(3,4,12)〕defadd(a,b):returnabpytest。mark。parametrize(a,b,expect,data)classTestParametrize(object):deftestparametrize1(self,a,b,expect):print(测试函数1测试数据为{}{}。format(a,b))assertadd(a,b)expectdeftestparametrize2(self,a,b,expect):print(测试函数2测试数据为{}{}。format(a,b))assertadd(a,b)expectifnamemain:pytest。main(〔s,test07。py〕)testsessionstartsplatformwin32Python3。8。0,pytest6。2。5,py1。11。0,pluggy1。0。0rootdir:D:AutoCodeplugins:html3。1。1,metadata1。11。0collecting。。。collected4itemstest07。py::TestParametrize::testparametrize1〔224〕测试函数1测试数据为22PASSEDtest07。py::TestParametrize::testparametrize1〔3412〕测试函数1测试数据为34PASSEDtest07。py::TestParametrize::testparametrize2〔224〕测试函数2测试数据为22PASSEDtest07。py::TestParametrize::testparametrize2〔3412〕测试函数2测试数据为34PASSED4passedin0。12sProcessfinishedwithexitcode0
  由以上代码可以看到,当装饰器装饰测试类时,定义的数据集合会被传递给类的所有方法。装饰测试函数单个数据importpytestdata〔Rose,white〕pytest。mark。parametrize(name,data)deftestparametrize(name):print(列表中的名字为{}。format(name))ifnamemain:pytest。main(〔s,test07。py〕)testsessionstartsplatformwin32Python3。8。0,pytest6。2。5,py1。11。0,pluggy1。0。0rootdir:D:AutoCodeplugins:html3。1。1,metadata1。11。0collected2itemstest07。py列表中的名字为Rose。列表中的名字为white。2passedin0。09sProcessfinishedwithexitcode0
  当测试用例只需要一个参数时,我们存放数据的列表无序嵌套序列,pytest。mark。parametrize(name,data)
  装饰器的第一个参数也只需要一个变量接收列表中的每个元素,第二个参数传递存储数据的列表,那么测试用
  例需要使用同名的字符串接收测试数据(实例中的name)且列表有多少个元素就会生成并执行多少个测试用例。一组数据importpytestdata〔〔1,2,3〕,〔4,5,9〕〕列表嵌套列表datatuple〔(1,2,3),(4,5,9)〕列表嵌套元组pytest。mark。parametrize(a,b,expect,data)deftestparametrize1(a,b,expect):一个参数接收一个数据print(测试数据为{},{},{}。format(a,b,expect))actualabassertactualexpectpytest。mark。parametrize(value,data)deftestparametrize2(value):一个参数接收一组数据print(测试数据为{}。format(value))actualvalue〔0〕value〔1〕assertactualvalue〔2〕ifnamemain:pytest。main(〔s,test07。py〕)testsessionstartsplatformwin32Python3。8。0,pytest6。2。5,py1。11。0,pluggy1。0。0rootdir:D:AutoCodeplugins:html3。1。1,metadata1。11。0collected4itemstest07。py测试数据为1,2,3。测试数据为4,5,9。测试数据为〔1,2,3〕。测试数据为〔4,5,9〕。4passedin0。09sProcessfinishedwithexitcode0
  当测试用例需要多个数据时,我们可以使用嵌套序列(嵌套元组嵌套列表)的列表来存放测试数据。
  装饰器pytest。mark。parametrize()可以使用单个变量接收数据,也可以使用多个变量接收,同样,测
  试用例函数也需要与其保持一致。
  当使用单个变量接收时,测试数据传递到测试函数内部时为列表中的每一个元素或者小列表,需
  要使用索引的方式取得每个数据。
  当使用多个变量接收数据时,那么每个变量分别接收小列表或元组中的每个元素列表嵌套多少个多
  组小列表或元组,测生成多少条测试用例。组合数据importpytestdata1〔1,2,3〕data2〔a,b〕pytest。mark。parametrize(a,data1)pytest。mark。parametrize(b,data2)deftestparametrize1(a,b):print(f笛卡尔积测试结果为:{a},{b})ifnamemain:pytest。main(〔vs,test06。py〕)
  通过测试结果,我们不难分析,一个测试函数还可以同时被多个参数化装饰器装饰,那么多个
  装饰器中的数据会进行交叉组合的方式传递给测试函数,进而生成nn个测试用例。标记用例importpytestpytest。mark。parametrize(testinput,expected,〔(35,8),(24,6),pytest。param(69,42,markspytest。mark。xfail),pytest。param(66,42,markspytest。mark。skip)〕)deftestmark(testinput,expected):asserteval(testinput)expectedifnamemain:pytest。main(〔vs,test06。py〕)
  输出结果显示收集到4个用例,两个通过,一个被跳过,一个标记失败,当我们不想执行某组测试
  数据时,我们可以标记skip或skipif;当我们预期某组数据会执行失败时,我们可以标记为xfail等。嵌套字典importpytestdata({user:name1,pwd:123},{user:name2,pwd:456})pytest。mark。parametrize(dic,data)deftestparametrize(dic):print(测试数据为{}。format(dic))ifnamemain:pytest。main(〔vs,test06。py〕)
  增加测试结果可读性
  参数化装饰器有一个额外的参数ids,可以标识每一个测试用例,自定义测试数据结果的显示,
  为了增加可读性,我们可以标记每一个测试用例使用的测试数据是什么,适当的增加一些说明。
  在使用前你需要知道,ids参数应该是一个字符串列表,必须和数据对象列表的长度保持一致。importpytestdata1〔(1,2,3),(4,5,9)〕ids〔a:{}b:{}expect:{}。format(a,b,expect)fora,b,expectindata1〕defadd(a,b):returnabpytest。mark。parametrize(a,b,expect,data1,idsids)classTestParametrize(object):deftestparametrize1(self,a,b,expect):print(测试函数1测试数据为{}{}。format(a,b))assertadd(a,b)expectdeftestparametrize2(self,a,b,expect):print(测试函数2数据为{}{}。format(a,b))assertadd(a,b)expectifnamemain:pytest。main(〔v,test06。py〕)
  不加ids参数的返回结果
  加ids参数的返回结果
  我们可以看到带ids参数的返回结果中的用例都被一个列表明确的标记了,而且通过这种标记
  可以更加直观的看出来,每个测试用例使用的数据名称及测试内容。

小洞不补大洞吃苦巜小洞不补大洞吃苦》之年轻恒牙(前牙)3类洞树脂充填。刚刚完成的一例年轻恒牙3类洞深龋,在局麻下行树脂充填治疗。希望广大家长多关心孩子牙齿健康,适时做好涂氟及窝沟封闭防龋……小米MIXa被三星复活?三星全新环绕屏手机曝光雷军看了都说好在2019年初,三星和华为同时发布了自家的首款折叠屏手机,这也代表手机形态进入了一个新纪元。而在同年雷军宣布把小米和红米进行分割,小米手机从此冲击高端,对标三星华为苹果。想要真……春天鞋子不用买太多,备齐这3双就够,配裤子裙子都好看在穿衣搭配中,鞋子作为下半身的亮点,存在感十足,维护着鞋面的轻盈感,还可以轻松的拔高个子,让人看着更加挺拔。早春来临,大家在换新衣的同时也不要忘记足下风光!春天的鞋子,贵……这届冬奥会,耐克消失了?作者:古原来源:正和岛(ID:zhenghedao)北京冬奥会结束了,但余波荡漾。历届奥运会,不仅是体育健儿们的战场,也是国际品牌的战场。不管是夏季奥运……17。3英寸大屏,诺基亚首款笔记本PureBookPro发布2月26日消息诺基亚与法国初创公司OFFGlobal合作,推出了旗下首款笔记本电脑产品PureBookPro。PureBookPro搭载了英特尔最新发布的12代酷睿i31220……CBA三消息广东新援状态大增,余嘉豪迎来复出,区俊炫应被重用爱国篮,爱CBA,我是洛姐,小伙伴们看完记得点赞!广东队这个赛季的外援阵容有些出乎球迷们的意料,最关键的就是球队的超级外援马尚并没有及时回归,最近几个赛季广东队都是使用的……韭菜盒子里,暗藏的这些养生知识你知道吗?在激动人心的第二十四届冬季奥林匹克运动会中,金牌少女谷爱凌爱吃的韭菜盒子意外走红,一度冲上热搜。以至有人云:古有关云长温酒斩华雄,今有谷爱凌‘温韭战滑雄’。你也许还……油漆和扬声器如何解释太阳等离子射流的物理特性太阳被带电粒子产生的尖峰、超热等离子体射流所覆盖,现在科学家们已经弄清楚了更多关于这些射流(或针状体)是如何产生并被驱动到恒星大气中的。通过一系列实验室实验和模型,一项新……珠峰玫瑰之新疆麦子马丽娅姆心动的瞬间新疆春日生活打卡季可以分享一张你拍的天空美照吗在新疆乌鲁木齐南山板房沟,有一座叫麦子庄园的民宿,主人是一位来自昌吉回族自治州的新疆姑娘马丽娅姆。当我误打误撞地走……还不知道肠道菌群,你就OUT了在我们弯弯曲曲的肠子里,居住着一群肠道菌群虽然肠道菌群看不见摸不着,听起来也很陌生,但是越来越多的研究发现,多样及复杂的肠道菌群,一定程度上表现了个人的健康程度。肥胖、糖……陈思诚离婚前绯闻满天飞,离婚后再无大绯闻,海王这是怎么了?说起陈思诚,我想大家都不陌生,他的名气不仅来源于是知名小花佟丽娅的老公,不,现在应该说是前夫。更是因为他自己就是一名才华横溢的导演,还是一名演技精湛的演……2022年油价第五次调整到来,国际油价在跌,17号还会继续涨众所周知,2022年国内油价已经4次上涨,汽油每吨分别上涨345元、310元、210元、260元,合计上涨1125元吨。上一次调整是3月3日,92号汽油迈入8元时代,全国均价达……
无创羊穿不知选择谁现在女人怀孕生孩子那可是全家的头等大事,为了生一个健康的宝宝,从刚怀孕起就要做各种各样的检查。尤其是到了孕中期以后,什么唐氏筛查、四维、糖耐等等,孕妈可一个也不敢少。当在……英国乡村很美,尤其是那些保留了百年的老房子英国是一个很令人着迷的地方,无论是风景还是文化,如果你走入这个国家,你真的会很上瘾,到底为什么,我自己也是说不清,也许是古老的文化,古老的村庄,整个英国的山水,还不仅仅是国际化……人民日报推荐生活中值得坚持的18件小事林夕曾说:人活着,就应该热爱生命,热爱生活,爱自己,爱别人,爱一切生灵。的确,生活是自己的,只有自己学会热爱,才能有幸福、美满的体验。正如人民日报在某博上发帖,讨论……谷神星曾经最大的小行星,现在最小的矮行星,可能存在海洋小行星主带众所周知,火星和木星之间存在一个小行星带。即距离太阳约2。173。64天文单位之间,运行着估计超过50万颗小行星,其中超12万颗已经被编号。小行星带……刘涛给保姆30元让她去买两条鱼,买两条死鱼有一次,刘涛突然想在家里吃鱼,就给了保姆30块钱,让她去市场买两条鱼,保姆很为难的讲,30块钱能买什么鱼。刘涛说:你挑那种死鱼,死鱼很便宜。保姆心想,越有钱的人难道……吃猪皮能抗衰老?医生若不想老太快,6种食物可常吃爱美之心人皆有之。每一个女性都想拥有美丽的容貌,因此会购买各种各样的护肤品,但是会发现坚持保养皮肤,一段时间后效果却没有那么理想,终究治标不治本。很多女性会从网络上……当我为五一假期收拾行李的时候,我都在打包些什么给大家讲个鬼故事:五一假期要来了。马上又是一年一度的五一劳动节。虽然假期只有三天,身边的小伙伴们还是纷纷选择出游。去的地方也是五花八门,总结下来:月收入一万的选择国内游;……目前最便宜的4款12256GB的手机,优点各不相同,都在30第一款:真我GTNeo闪速版在性能方面:搭载天玑1200处理器。屏幕采用了一块6。43英寸AMOLED电竞屏,支持120Hz刷新率,360Hz的触控采样率。在续航方面:内……金莎不服老,39岁还穿得花花绿绿,身高1米66却把自己穿成了春天来了,我又可以穿花花绿绿的裙子啦看到有人说,来到春天就可以随意穿搭各种颜色的裙子,因为春天就是五颜六色的季节,所以你穿得再浮夸和浓艳的颜色,也不会招来别人的反感。不过……照片里的青春北京冬奥会高山滑雪项目为何选址延庆?亲历者讲述开栏的话激扬青春梦,奋进新时代;不负青年志,赤心报国家。政协委员是各行各业的精英,他们在各自领域艰苦奋斗、奉献青春、建功立业,为国家发展和社会进步作出了重要贡献。很多委员……吕中儿媳何琳巅峰时息影照顾公婆,家中需要的是妻子,不是演员演员何琳,2005年出演《为奴隶的母亲》获第33届国际艾美奖最佳女主角奖,她是亚洲第一位获得这个奖项的女演员。2006年出演《麻辣婆媳》的吴芮一角,提名第26届飞天奖。……据悉,宣璐新剧只此江湖梦开机,看到由谁演男主网友直呼期待高伟光和宣璐不知诸位看官可曾看过他们演的戏,这两位演员,不论演技还是颜值方面都很不错。下面我们来介绍一下高伟光,高伟光的眼睛长得很好看,属于耐看型的,近年他也出演过很多影……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网