范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Python3requestsunittest接口自动化测试实战

  一、Requests介绍Requests is an elegant and simple HTTP library for Python, built for human beings.
  翻译过来就是:Requests 是为人类写的一个优雅而简单的 Python HTTP 库。这个介绍很直白了,让我们先来感受一下 Requests 的威力。 import requests   # 发送请求 response = requests.get(url="http://www.baidu.com/s", params={"wd":"python"}) # 处理响应 print(response.status_code)   #返回 200
  这个请求如果用 urllib 来实现,代码如下: import urllib.parse import urllib.request   url = "http://www.baidu.com/s" params = urllib.parse.urlencode({"wd":"python"}) # 发送请求 response = urllib.request.urlopen("?".join([url, params])) # 处理响应 print(response.getcode())   #返回 200
  从感官上就能看出来,使用 urllib 在 URL 、参数等方面会复杂一些。这只是冰山一角,实际使用中 Requests 还有好多方面超越 urllib ,它并不是浪得虚名,接下来的学习中你就会感受到。 二、unittest介绍
  说到 Python 的单元测试框架,想必接触过 Python 的朋友脑袋里第一个想到的就是unittest。 的确,作为 Python 的标准库,它很优秀,并被广泛用于各个项目。但你知道吗?其实在 Python 众多项目中,主流的单元测试框架远不止这一个。
  本系列文章将为大家介绍目前流行的 Python 的单元测试框架,讲讲它们的功能和特点并比较其异同,以让大家在面对不同场景、不同需求的时候,能够权衡利弊,选择最佳的单元测试框架。 三、Python3+requests+unittest
  首先,我们可以捋一捋思路,想一想接口测试的流程
  其次,选择合适的框架
  流程清晰之后,我们需要选择一个合适的框架,于是选择了Python3+requests+unittest框架
  Requests模块发送http的网络请求,请求类型主要包含了post,get, PUT,DELETE,HEAD
  python+unittest单元测试框架构成,和测试报告生成(HTMLTestRunner)
  框架详解不在此赘述
  基于以上,我们来一步步搭建我们的框架。在这个过程中,我们需要做到业务和数据的分离,这样才能灵活,达到我们写框架的目的。接下来,我们来进行结构的划分。
  我们的结构是这样的
  data:存放自动化测试所用到的数据文档
  log:存放生成的日志文件
  base:存放公共的方法
  report:存放生成的自动化测试报告
  testcase:存放测试脚本
  接下来,公共方法的开发
  整体结构有了划分,接下来就该一步步的填充整个框架了,我们先来看看Base文件中的公共类或函数,这主要用于后续测试case的调用,所有公共的、一成不变的数据都可以放在这里,维护也方便
  配置文档如下 [DATABASE] data_address = ./data/ report_address = ./report/   [HTTP] base_url = http://xxx.xx
  想知道怎样从配置文档中得到或写入相应的数据吗?那继续看吧 import os import configparser   # 获取当前py文件地址 proDir = os.path.split(os.path.realpath(__file__))[0] # 组合config文件地址 configPath = os.path.join(proDir,"config.ini")   class ReadConfig:     def __init__(self):         #获取当前路径下的配置文件         self.cf = configparser.ConfigParser()         self.cf.read(configPath)       def get_config(self,field,key):         #获取配置文件中的key值         result = self.cf.get(field,key)         return result       def set_config(self,field,key,value):         #向配置文件中写入配置信息         fb = open(configPath,"w")         self.cf.set(field,key,value)         self.cf.write(fb)
  那问题又来了,我们的测试数据放在哪里?怎么取值?怎么写入?怎么保存?…
  别急,接着往下看
  测试数据优先考虑放在excel或database中,此处以excel为例做个简单介绍
  这里需要用到两个操作表格的库,xlrd数据驱动的读取,作用于excel文档,但xlrd不能写入数据,所以引入xlutils数据驱动的读取和写入
  安装方法可以用pip3 install xlrd和pip3 install xlutils 来安装。 import xlrd import xlutils.copy from Base.readConfig import ReadConfig import time   class ReadExcel:       def __init__(self,section,field,sheet):         # 打开工作表,并定位到sheet         data_address = ReadConfig().get_config(section,field)         workbook = xlrd.open_workbook(data_address)         self.table = workbook.sheets()[sheet]         def get_rows(self):         # 获取excel行数         rows = self.table.nrows         return rows       def get_cell(self,row,col):         # 获取单元格数据         cell_data = self.table.cell(row,col).value         return cell_data       def get_col(self,col):         # 获取整列数据         col_data = self.table.col_value(col)         return col_data   class WriteExcel:     def __init__(self,section,field,sheet):         # 打开工作表         self.address = ReadConfig().get_config(section,field)         self.workbook = xlrd.open_workbook(self.address)         self.wf = xlutils.copy.copy(self.workbook)         self.ws = self.wf.get_sheet(sheet)       def set_cell(self,row,col,value):         #设置单元格数据         self.ws.write(row,col,value)       def save_excel(self,filename,format):         #获取当前时间         self.time = time.strftime("%Y%m%d%H%M%S", time.localtime())         #生成文件的文件名及格式         self.report = filename + "_" +self.time + format         #保存文件         self.wf.save(self.report)
  然后,测试脚本的编辑
  一切准备就绪,下面通过一个简单的、完整的代码进行演示公共函数的调用,框架的使用及报告的生成 import unittest import requests from Base.readConfig import ReadConfig from Base.readExcel import ReadExcel from Base.readExcel import WriteExcel #实例化 readexcel = ReadExcel("DATABASE","data_address",0) writeexcel = WriteExcel("DATABASE","data_address",0)   class testcase(unittest.TestCase):     #初始化     def setUp(self):         #获取url         self.base_url = ReadConfig().get_config("HTTP", "base_url")         self.url = self.base_url + readexcel.get_cell(1,1)         #获取请求头         self.headers = readexcel.get_cell(1,4)       def test_case(self):         nok = 0         ner = 0         # 循环读取excel中的测试数据,进行结果验证,并生成excel形式的测试报告         for i in range(3,readexcel.get_rows()):             #发送网络请求,得到响应值             response = requests.post(self.url, headers=self.headers,   data=readexcel.get_cell(i,4).encode("utf-8"))             actualresult = response.json()             #获取excel中的预期结果             expectresult = eval(readexcel.get_cell(i,6))             # 获取需验证的数据             key = eval(readexcel.get_cell(i, 5))             keylen = len(key)             j = 0             for k in range(keylen):                 aresult = "actualresult" + key[k]                 eresult = "expectresult" + key[k]                 if eval(aresult) == eval(eresult):                     #预期结果和实际结果一致                     j = j + 1             if j == keylen:                 #测试数据执行通过                 nok = nok + 1                 writeexcel.set_cell(i, 8, "SUCCESS")             else:                 # 测试数据执行失败,并将实际结果写入excel                 ner = ner + 1                 writeexcel.set_cell(i, 8, "FAILURE")                 writeexcel.set_cell(i, 7, str(actualresult))                 print("第", i + 1, "行用例执行失败:预期结果是", expectresult, "实际结果是", actualresult)             # 保存测试报告             writeexcel.save_excel("testreport", ".xls")             print("测试数据中总共", nok, "条用例执行通过", ner, "条用例执行失败")       #释放资源     def tearDown(self):         pass   if __name__ == "__main__":     #构造测试集合     suite = unittest.TestSuite()     suite.addTest(testcase("test_case"))     #创建html文件     filename = ReadConfig().get_config("DATABASE", "report_address") + "testreport.html"     fb = open(filename,"wb")     #执行测试并生成html测试报告     runner = HTMLTestRunner.HTMLTestRunner(stream = fb,description = "针对接口的描述信息",title = "某某的自动化测试报告")     runner.run(suite)     #关闭文件     fb.close()
  最后,生成的html报告
  最后:【可能给你带来帮助的教程】
  软件测试最新自学教程
  这一些资料,对做【软件测试】的朋友而言应该是较为完整了,这类学习资料也陪伴我走过了最艰难的路程,希望也可以帮助到你!万事要尽早,尤其是技术行业,一定要提升技术功底。

内外兼修,奇瑞小蚂蚁完美契合当代女性对汽车的期待在当今社会,女性有了法律的保护,比起旧社会,女性地位提高了很多,在汽车市场中,女性的话语权也在日益增加当中。女性消费者在选择汽车的时候与男性不同,女性追求的是汽车的实用性以及自我取奇瑞小蚂蚁,见缝插针,停车就是方便车身小巧就是奇瑞小蚂蚁最大的优点,相信极大一部分消费者选择奇瑞小蚂蚁这款微型车就是因为它的车身小,在城市里开起来比较灵活。奇瑞小蚂蚁这款汽车主要面向的用户就是城市女性白领,这类人群Arduino梦幻交互雪花2019梦幻雪花由30颗LED打造,分为17个独立的部分,由ArduinoNano控制。每组LED都可以用PWM调校,这样就可以创作出梦幻视觉效果。首先打印一个漂亮而简单的雪花,记住要让它星光级ISP摄像头模组IMX290IMX327支持树莓派4ampampampRK3399平台VEYEMIPI290327是一款主打低照度的CSI2接口的摄像机模块。本模块采用3838mm的常用尺寸,以主板mini转接板的形式对接到不同的嵌入式处理系统中。适用于机器视觉智能Arduino转盘制作ULN2003A步进驱动器分线板5V步进电机28BYJ48亚马逊(步进电机和驱动器分线板套件)5。5mmDCJackAmazon轴承650ZZ14mm外径,5mm宽度,5mm内径数3D打印制造极简的自动喂鱼机很早以前我们介绍过一款基于树莓派和微信的远程喂鱼方案,有时候我们只想来一次说走就走的旅行,出门浪几天就回,应一下急,用这个方案就显得颇为费事了。下面要介绍的是基于Arduino制作律动荆棘皇冠CrownofThorns她一袭长纱,一捧花,一顶皇冠,款款向你走来。从此以后,她便成了你的小苹果,你的一切,你的世界。这样一顶七彩皇冠,见证爱情的忠贞,填满追求的热烈,宣示未来的多彩是不是想把她的笑容定格安全是汽车的生命线,奇瑞小蚂蚁是否守好了这根线?随着微型汽车的崛起,新能源汽车产品逐渐走进了我们的生活当中,但是微型新能源汽车产品所带来的安全问题也是非常严重的。俗话说,安全是汽车的底线,是红线,更是生命线。很多人都说哪有那么严功能实用才是王道,体验吉利博越的GKUI车机系统现今这个年代,车企造车也有压力,因为汽车不仅要靠颜值机械方面的用心吸引消费者,而软件方面也必须要有点看头才能留住消费者的心,我们所说的软件方面,指的就是车载系统。吉利博越所搭载的G吉利博越的车机GKUI的智能化让你大开眼界很多人都觉得自己车上的车机系统比较鸡肋,用着卡顿,功能表现完全不如手机方便。但是这款吉利博越搭载的GKUI车机系统不一样,使用简单流畅智能化十足,完全不输手机,甚至可以说比手机还要奇瑞大蚂蚁翻山越岭的秘密是什么?随着国家的提倡和政策扶持,新能源汽车产品逐渐被消费者所接受。但是新能源汽车由于动力等各方面的不足,很多人都只会选择在城市周围去驾驶,很少有新能源汽车可以翻山越岭。那么,在新能源汽车
被23万用户举报,遭封630年,这个22岁的年轻人做了什么?5月17日,快手官方平台发布通知称,网红主播殷世航,由于在直播中存在炒作卖货低俗演戏虚假宣传等违规行为,遭到23万条用户举报,目前官方平台已经对其帐号进行了封禁处理!除此之外,另据2021年世界电信和信息社会日大会召开5G应用扬帆数字化转型加速光明日报记者刘坤5月17日,2021年世界电信和信息社会日大会在河南郑州召开。本次大会以在充满挑战的时代加速数字化转型为主题。会上,5G工业机器人5G超屏手机等一大批智能产品,以及别无选择的三缸机对全新奇骏来说,销量腰斩只是开始超级奇骏工程,累计投资达到190亿元人民币,是日产史上规模最大复杂程度最高的项目之一。上海车展过去了大半个月了,让人印象深刻的当然是厂家供应商甚至软件开发商都在全力推进新能源普及进有关数字人民币的思考最近数字人民币火遍全网,本人经过一番简单思考后,有以下几点关于数字人民币的粗浅看法1。数字人民币是法币,以电子形式体现,可有效规避国际贸易中货币支付兑换带来不便。对国与国之间,贸易iQOO官宣LCD屏新机,搭载骁龙870芯片,可完美替代红米K30S至尊版3月16日,iQOO发布iQOONeo5,不仅搭载备受市场欢迎的骁龙870次旗舰芯片,而且起售价仅为2499元,受到了广大用户特别是游戏爱好者的欢迎。在iQOONeo5发布后两个月荣耀Play5系列发布轻奢降价了,搭载的国产芯片是亮点荣耀距发布上一台旗舰已经过去四个多月,期间也有荣耀V40轻奢版以及一些IoT产品发布,不过这些显然不足以承载荣耀的野心,万众期待的荣耀50则还要再等等。5月18日,荣耀发布了荣耀P网易季报图解营收205亿同比增20游戏收入占比73雷帝网雷建平5月18日报道网易(NasdaqNTES)今日发布财报。财报显示,网易2021年第一季度净营收为205。172亿元,这是网易季度营收首度超过200亿。归属于网易公司股东台积电1nm制程获重大进展金属铋或成新材料想要让芯片取得更加出色的性能,除了架构设计之外,另外一项重要的工艺就是制程,因为制程决定着在一定的面积下能够塞下多少晶体管,从而带动芯片的极速发展。目前在晶圆代工领域,台积电算得上最便宜的骁龙870手机?iQOONeo5活力版来了骁龙870LCD44W快充今年,手机市场几乎已经放弃了LCD的屏幕,OLED毫无疑问成为了大势所趋。因为OLED不仅轻薄色彩表现好,而且还能做更窄的边框,难道LCD永不为奴真的要成为历史吗?并不是,LCD成公司倒闭女友分手负债百万,最惨共享单车创始人告诉你什么叫九死而后生这个世界如今更多的人追求个性独立,喜欢按自己的想法做事。根据统计,高达82的富二代都不愿接班家族企业,他们更愿意在事业上大手笔。今日我要告诉大家,这位富二代,也选择了自己创业,但似维信诺全新的屏下前摄方案曝光预计Q3发布,中兴首发IT之家5月17日消息在今日的SIDDisplayWeek2021上,维信诺公布了多款创新技术及商业化应用,例如HIAA极致开孔屏下摄像解决方案InVseePro,以及首次在笔记本