保健励志美文体育育儿作文
投稿投诉
作文动态
热点娱乐
育儿情感
教程科技
体育养生
教案探索
美文旅游
财经日志
励志范文
论文时尚
保健游戏
护肤业界

一篇文章搞懂unittest单元测试框架

  每天进步一点点,关注我们哦,每天分享测试技术文章
  码同学公众号:自动化软件测试
  码同学抖音号:小码哥聊软件测试
  Python2。1及以后的版本,将unittest作为一个标准模块放入Python开发包中。
  01使用unittest编写测试用例
  规则:importunittest创建一个测试类,必须要继承unittest。TestCase类创建一个测试方法,且方法要以test开头fromcalculatorimportCalculatorimportunittestclassTestAdd(unittest。TestCase):deftestadd(self):cCalculator(3,5)resultc。add()self。assertEqual(result,8)ifnamemain:unittest。main()通过main()方法来执行测试用例;按照测试类、方法的名称ASCII值大小的顺序执行用例
  unittest的执行结果:。表示测试用例执行通过F表示执行失败E表示执行错误s表示运行跳过
  02三个重要概念
  TestCase最小的测试单元,即测试方法。unittest提供了TestCase基类,我们创建的测试类要继承该基类,它可以用来创建新的测试用例。
  TestSuite测试用例、测试套件或两者的集合,用于组装一组要运行的测试。
  使用TestSuite类来创建测试套件。
  TestRunnerTestRunner是一个组件,用于协调测试的执行并向用户提供结果。unittest提供了TextTestRunner类运行测试用例。
  03测试用例执行顺序
  unittest默认按照ASCII码的顺序加载测试用例(包括测试目录和测试文件、测试类、测试方法),即它并不是按照测试用例的创建顺序从上到下执行的。
  discover()和main()方法的执行顺序是一样的。故想让某个测试文件先执行,可以在命名上加以控制。
  如何控制测试用例的执行顺序?可以通过TestSuite类的addTest()方法按照一定的顺序来加载测试用例,这样想先被执行的用例就可以先加载。fromcalculatorimportCalculatorimportunittestclassTestAdd(unittest。TestCase):deftestadd(self):cCalculator(3,5)resultc。add()self。assertEqual(result,8)deftestadddecimals(self):cCalculator(3。5,5。5)resultc。add()self。assertEqual(result,9)classTestSub(unittest。TestCase):deftestsub(self):cCalculator(5,1)resultc。sub()self。assertEqual(result,4)ifnamemain:创建测试套件suitunittest。TestSuite()suit。addTest(TestSub(testsub))添加测试用例suit。addTest(TestAdd(testadddecimals))创建测试运行器runnerunittest。TextTestRunner()runner。run(suit)
  04执行多个测试用例
  unittest。defaultTestLoader。discover()方法可以从多个文件中查找测试用例。
  该类根据各种标准加载测试用例,并将它们返回给测试套件
  discover(startdir,patternTest。py,topleveldirNone)startdir:待测试的模块名测试用例目录;discover()方法会自动根据这个参数查找测试用例文件pattern:测试用例文件名的匹配原则topleveldir:测试模块的顶级目录,如果没有顶级目录,默认为NoneimportunittesttestdirTest文件目录suitsunittest。defaultTestLoader。discover(testdir,patternTest。py)ifnamemain:runnerunittest。TextTestRunner()runner。run(suits)
  如果想让discover()查找子目录下的测试文件,得将子目录标记为一个python模块(子目录下放init。py文件)
  05跳过测试和预期失败
  importunittestclassMyTest(unittest。TestCase):unittest。skip(跳过这条用例)deftestskip(self):print(aaa)unittest。skipIf(32,当条件为真时跳过测试)deftestskipif(self):print(bbb)unittest。skipUnless(32,当条件为假时跳过测试)deftestskipunless(self):print(ccc)不论执行结果是什么,都将测试标记为失败unittest。expectedFailuredeftestfail(self):print(ddd)ifnamemain:unittest。main()
  执行结果:E:seleniumD:ProgramFilesPython39python。exee:seleniumTestunittestskipfail。pydddussccc。Ran4testsin0。001sFAILED(skipped2,unexpectedsuccesses1)
  以上四个装饰器同样适用于测试类。
  06Setup和Teardown
  setUpModuletearDownModule在整个模块的开始与结束时被执行setUpClasstearDownClass在测试类的开始与结束时被执行setUptearDown在测试用例的开始与结束时被执行importunittestdefsetUpModule():print(Modulestart。。。。。)deftearDownModule():print(Moduleend。。。)classMyTest(unittest。TestCase):classmethoddefsetUpClass(cls):print(ClassStart。。。)classmethoddeftearDownClass(cls):print(Classend。。。)defsetUp(self):print(testcasestart。。。)deftearDown(self):print(testcaseend。。。)deftestcase1(self):print(thisisfirsttestcase)deftestcase2(self):print(thisissecondtestcase)ifnamemain:unittest。main()
  执行结果如下:E:seleniumD:ProgramFilesPython39python。exee:seleniumTestunittestsetup。pyModulestart。。。。。ClassStart。。。testcasestart。。。thisisfirsttestcasetestcaseend。。。。testcasestart。。。thisissecondtestcasetestcaseend。。。。Classend。。。Moduleend。。。Ran2testsin0。002sOK
  免费领取码同学软件测试课程笔记超多学习资料完整视频最新面试题,可以转发文章私信码同学666获取资料哦
  07Web自动化测试
  importunittestfromseleniumimportwebdriverfromtimeimportsleepclassBaidu(unittest。TestCase):classmethoddefsetUpClass(cls):cls。driverwebdriver。Chrome()cls。driver。implicitlywait(5)cls。driver。get(http:www。baidu。com)cls。driver。maximizewindow()classmethoddeftearDownClass(cls):cls。driver。quit()defsearch(self,text):self。driver。findelementbyid(kw)。clear()self。driver。findelementbyid(kw)。sendkeys(text)self。driver。findelementbyid(su)。click()sleep(3)deftestsearchselenium(self):searchkeyseleniumself。search(searchkey)self。assertEqual(self。driver。title,searchkey百度搜索)deftestsearchpython(self):searchkeypythonself。search(searchkey)self。assertEqual(self。driver。title,searchkey百度搜索)ifnamemain:unittest。main()
  08hrParameterized
  Parameterized是python的一个参数化库,同时支持unittest、pytest单元测试框架。pipinstallparameterizedparameterized。expand()加载数据,列表中每个元组是一条测试用例importunittestfromtimeimportsleepfromseleniumimportwebdriverfromparameterizedimportparameterizedclassTestBaidu(unittest。TestCase):classmethoddefsetUpClass(cls):cls。driverwebdriver。Chrome()cls。driver。get(http:www。baidu。com)cls。driver。maximizewindowclassmethoddeftearDownClass(cls):cls。driver。quit()defsearch(self,searchkey):self。driver。findelementbyid(kw)。clear()self。driver。findelementbyid(kw)。sendkeys(searchkey)self。driver。findelementbyid(su)。click()sleep(5)parameterized。expand(〔(case1,selenium),(case2,python)〕)deftestsearch(self,name,searchkey):self。search(searchkey)self。assertEqual(self。driver。title,searchkey百度搜索)ifnamemain:unittest。main(verbosity2)
  09hrDDT
  DataDrivenTests是针对unittest单元测试框架设计的扩展库。
  安装:
  pipinstallddt
  导入:
  fromddtimportddt,data,filedata,unpack
  使用规则:必须用ddt装饰测试类数据有不同形式的参数化,如下方的元组、列表、字典类型data(数据列表元组字典,字典的key和方法中的形参名称保持一致)unpack装饰测试方法importunittestfromtimeimportsleepfromseleniumimportwebdriverfromddtimportddt,data,filedata,unpackddtclassTestBaidu(unittest。TestCase):classmethoddefsetUpClass(cls):cls。driverwebdriver。Chrome()cls。driver。get(http:www。baidu。com)cls。driver。maximizewindowclassmethoddeftearDownClass(cls):cls。driver。quit()defsearch(self,searchkey):self。driver。findelementbyid(kw)。clear()self。driver。findelementbyid(kw)。sendkeys(searchkey)self。driver。findelementbyid(su)。click()sleep(5)data((case1,selenium),(case2,python))unpackdeftestsearch1(self,name,searchkey):print(第一组测试用例:,name)self。search(searchkey)self。assertEqual(self。driver。title,searchkey百度搜索)data(〔case1,selenium〕,〔case2,python〕)unpackdeftestsearch2(self,name,searchkey):print(第二组测试用例:,name)self。search(searchkey)self。assertEqual(self。driver。title,searchkey百度搜索)data({key:selenium},{key:python})unpackdeftestsearch3(self,key):print(第三组测试用例:,key)self。search(key)self。assertEqual(self。driver。title,key百度搜索)ifnamemain:unittest。main(verbosity2)
  执行报错如下时,是因为文件名也为ddt:PSE:seleniumD:ProgramFilesPython39python。exee:seleniumTestunittestddt。pyTraceback(mostrecentcalllast):Filee:seleniumTestunittestddt。py,line4,inmodulefromddtimportddt,data,filedata,unpackFilee:seleniumTestunittestddt。py,line4,inmodulefromddtimportddt,data,filedata,unpackImportError:cannotimportnameddtfrompartiallyinitializedmoduleddt(mostlikelyduetoacircularimport)(e:seleniumTestunittestddt。py)
  10hr数据文件的参数化
  filedata()装饰器中内容为文件名称。支持json格式和yaml格式。importunittestfromtimeimportsleepfromseleniumimportwebdriverfromddtimportddt,data,filedata,unpackddtclassTestBaidu(unittest。TestCase):classmethoddefsetUpClass(cls):cls。driverwebdriver。Chrome()cls。driver。get(http:www。baidu。com)cls。driver。maximizewindowclassmethoddeftearDownClass(cls):cls。driver。quit()defsearch(self,searchkey):self。driver。findelementbyid(kw)。clear()self。driver。findelementbyid(kw)。sendkeys(searchkey)self。driver。findelementbyid(su)。click()sleep(5)filedata(ddtdata。json)unpackdeftestsearch1(self,searchkey):print(第一组测试用例:,searchkey)self。search(searchkey)self。assertEqual(self。driver。title,searchkey百度搜索)filedata(ddtdatayml。yaml)unpackdeftestsearch2(self,case):searchkeycase〔0〕〔searchkey〕print(第二组测试用例:,searchkey)self。search(searchkey)self。assertEqual(self。driver。title,searchkey百度搜索)ifnamemain:unittest。main(verbosity2)ddtdata。json{case1:{searchkey:python},case2:{searchkey:ddt}}ddtdatayml。yamlcase1:searchkey:pythoncase2:searchkey:ddt
  END
  免费领取码同学软件测试课程笔记超多学习资料学习完整视频,可以关注我们公众号哦:自动化软件测试

次黄仲甄峡中韵起个诗意的名字宋代李流谦九江度尽恶风波,峡口窥天一握多。亦爱吾庐觉归好,数乘此险奈观何。响迎涛濑将愁上,青惜峰峦等梦过。不管行人听不得,暝猿……寿侄起个诗意的名字宋代尹直卿浙水春风第一家,只言当日长兰芽。谁知李白三山侣,来看姚黄二月花。金瓮荼蘼香作酒,玉瓯松子肉为茶。满板松竹并奇物,寿似……卧云菴醉后起个诗意的名字宋代白玉蟾千岩万壑深复深,洞口枯树鸣幽禽。瑶月影松大静淡,琅风韵竹夜萧森。暮云献碧出孤岫,夕鸟拖红投螟林。孔明终久须朝日,安石……老罢起个诗意的名字宋代张嵲满谷千千万万红,含情一一待春风。难将朽质争娟好,拚却轮囷似老松。老罢张嵲介绍张嵲(一九六一一四八),字巨山,襄阳(今湖……次僧兄山居韵其二起个诗意的名字宋代吴惟信素抱居山志,今番始有涯。琴床临砌竹,棋局近庭花。诗兴常便酒,蔬肠渐畏茶。清闲兄自乐,世事绝无些。次僧兄山居韵其二吴惟信介绍……高阳台题百蝶图起个诗意的名字清代毕景桓翅软如绵,腰纤似玉,看他妩媚难禁。两两三三,飞来偷入花阴。香闺午倦抛书卷,把滕王、图画重寻。倚晴窗、搦管裁笺,点粉涂金。笑……山窗起个诗意的名字清代戴亨红杏发南枝,山窗鸟声集。落花飞不高,随风复飘入。山窗戴亨介绍戴亨,字通乾,号遂堂,汉军旗人。康熙辛丑进士,官齐河知县。……宿大石桥起个诗意的名字清代戴亨去家三十里,犹隔一宵程。两岸众峰敛,一钩新月明。近乡思愈切,久别恨旋生。不寐听残夜,荒鸡下五更。宿大石桥戴亨介绍戴亨……秋千起个诗意的名字宋代俞桂吾今两鬓已成丝,每每逢春独自悲。最恨秋千无力上,风流不比少年时。秋千俞桂介绍字希郄,仁和(今浙江省杭州)人,宋代官吏、……流河驿泊舟夜月言意二首其一起个诗意的名字清代陈万策林钟律晚近清秋,薄暮风凉动碧流。烟火一湾当水驿,桂光半满入兰舟。江村泊艇宜宵赏,海国归桡是昼游。即事已添潇洒兴,清衾有梦到林丘。……解组其一起个诗意的名字清代黄金台罢郡衣堪典,谁言酒易赊。绳床留待月,铁笔拟评花。朱凤仙人宅,青牛柱史车。凄凉千里梦,无夜不还家。解组其一黄金台介绍(……粉蝶儿起个诗意的名字清代陆求可琥珀生光,人人都道琼液。是杜康、旧留米汁。但三杯、欢情浃,驱愁无迹。把醉乡、一路蚕丛独辟。坐醉行歌,止容陶潜王绩。杖头钱、……
<<<<<<>>>>>>
生活需要互助小学作文篇一:生活需要互助生活需要互助,如果生活中没有互相帮助,那么世界将变成什么样子呀?有一首歌唱的好:只要人人都献出一点爱,世界将变成美好的人间每次只要听到这首歌,我就会想起……夏雨的优秀作文550字这雨,既不是春雨,又不是秋雨,更不是什么绵绵细雨;它既不像牛毛,又不像松叶,更不像什么串珠。它是夏天的雨,夏天的倾盆大雨,能给世间万物带来凉爽的夏雨。咔嚓霹雳闪着一道道白……太阳城作文600字暑假,再临太阳城,我喜不自胜。太阳城有着ldquo;世外桃源rdquo;的美誉,风光无限,来过一次,便再也无法忘怀。开车通过大门,行过一段林间马路,看见一个阶梯式的楼,这……可爱的春天作文400字篇一:可爱的春天走过炎热的夏、萧瑟的秋、寒冷的冬,春天终于来了。她踏着不变的步伐,给大地披上了一件绿纱。河边的小鸭子迫不及待地跳入河中,欢快地边唱歌边洗澡,真不愧是……小学五年级发生在暑假的一件事作文暑假过得很快呀!一转眼一个月就过去了。下面是小编整理的发生在暑假的一件事作文,欢迎大家阅读!【发生在暑假的一件事作文1】今天,天刚刚亮,我就随一家人开着拖拉机去地里……那一缕温暖的阳光品学网专稿未经允许不得转载那一缕温暖的阳光刻在木板上的名字未必不朽;刻在石头上的名字也未必流芳百世;老师,您的名字刻在我们的心灵上,这才真正永存hellip;hel……护航数据流通安全隐私计算助力建设统一数据大市场本报记者李晓红近日,《关于加快建设全国统一大市场的意见》(以下简称《意见》)明确,我国将加快培育统一的技术和数据市场,建立健全数据安全、权利保护、跨境传输管理、交易流通、……高二学生新的开始作文这是一个新的开始,这是一个新的环境,这是一群新的面孔。所有的一切都是崭新的。心中难免会对过往燃起一股浓浓的思念,所以,愿意躲在最角落看身边的世界,去拾起过往的回忆。接下来是小编……转盘微波炉比较好还是平板微波炉比较好?现在市面上的微波炉大多都是平板式的,转盘式微波炉市场占有率很少了,就是有也大多是一些老款机型,那么这两种有什么区别呢?下面跟我一起来分析一下。微波炉是利用炉内的磁控管来产……我爱我的家乡六年级作文9篇无论是身处学校还是步入社会,大家都有写作文的经历,对作文很是熟悉吧,作文可分为小学作文、中学作文、大学作文(论文)。相信写作文是一个让许多人都头痛的问题,以下是小编收集整理的我……航天梦遨游火星小学作文【导读】:深秋的戈壁大漠,黄沙飞舞,但是此刻的酒泉卫星发射场亮如白昼,与我们朝夕相处的教练来了、专家来了、我们亲爱的家人来了、可爱的少先队员来了人们怀着激动的心情来为我们送行。……一款简单易用的dotnet汉字拼音操作库Pinyin4NET执行汉字和拼音之间的互相转化是一个常见的需求,今天推荐一款dotnet平台下的汉字拼音操作库Pinyin4NET。安装通过nuget即可。InstallPackagehyjia……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网