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

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报告
  最后:【可能给你带来帮助的教程】
  软件测试最新自学教程
  这一些资料,对做【软件测试】的朋友而言应该是较为完整了,这类学习资料也陪伴我走过了最艰难的路程,希望也可以帮助到你!万事要尽早,尤其是技术行业,一定要提升技术功底。

比特币和以太坊币价下跌的原因是什么?因为马斯克默认抛了手里的比特币啊,不过涨了那么久了,跌回来也是正常的。正常波动马斯克的推特放话,影响人的情绪,导致资金进出不平衡,下跌。收割,没有其他,因为更新技术及生态的区块链虚我国高海拔宇宙线观测站收到的天鹅座万年前来信,会讲个啥?感谢招待,我们刚刚到家,欢迎你们过来做客捂脸信息里是这样说的来呀,来天鹅座啊,快活啊,反正有大把时间!来呀,来天鹅座啊,造作啊,反正有大把风光。捂脸捂脸捂脸到现在为止,还没有确切的为什么OPPOVIVO系统成为国内佼佼者,MIUI和Flyme却跟不上了?之所有MIUI和Flyme跟不上了的这种感受,主要压力还是来自OPPO和vivo。换句话说,OPPO和vivo近两年的系统进步比较快,而MIUI和Flyme有种吃老本的嫌疑,在原地为什么魅族口碑这么好却没什么人用?我是魅族手机的用户,现在还在用魅族7PRO,就是手机背后还有小屏幕的那款。魅族手机手机品牌各有喜好身边用魅族手机的确实不多,选择哪个品牌的手机,这要看个人喜好和个人情感,有些人就是身份证到期银行要更新,需要一家一家的去吗?身份证到期是需要到银行更新的,要是不更新会影响你的用卡,所有的银行都是这样的,更新有以下几种方法一到银行网点去更新,本人拿着身份证和银行卡去银行更新,不用去开户银行,任意网点都可以5G标准必要专利声明数量位列全球首位记者近日从工业和信息化部获悉我国5G发展取得领先优势,已累计建成5G基站超81。9万个,占全球比例约为705G手机终端用户连接数达2。8亿,占全球比例超过805G标准必要专利声明数张雪峰于苏州成立教育科技新公司,注册资本1000万企查查APP显示,近日,苏州峰学蔚来教育科技有限公司成立,法定代表人为张子彪(张雪峰),注册资本1000万元人民币,经营范围包含面向家长实施的家庭教育咨询服务软件开发软件销售人工智网友升级了鸿蒙系统,各项体验都很不错,终于有了自己的系统国人终于有了自己的系统!近日笔者手中的华为手机已收到了鸿蒙OS2。0开发者Beta版的推送,迫不及待第一时间进行了升级。今天和大家分享一下鸿蒙系统的真实体验,一切都比预料的要好!首阿里推出吃货笔记,或为竞争大众点评和小红书作者王乙淇编辑张宇喆5月17日,据Tech星球报道,阿里创新事业群于近期上线了一款名为吃货笔记的美食种草类产品,核心玩法是分享日常种草的美食内容,内容形式包含图文短视频等。打开吃货aigo这款U盘厉害了!手机电脑通用,读取速度100MBs对于上班族来说,平时工作中肯定少不了处理办公文件。但是,如果你外出时手边没有电脑,而资料就在U盘里存着或者需要把几百张照片批量传到电脑上,手头又没有数据线和网络,这样的情况下是不是诺基亚反超华为,拿下150份全球5G合同,华为正处于什么情况?是金子总会发光,正常的市场经济是不可能永远受政治操控的。风水轮流转,时间能纠正一切。政治干扰了正常的市场,没办法,美国盟友选边站,使用华为要被制裁。去财消灾吧,用不如华为的5G设备
小米12获得三证,月底亮相,联想高管暗讽晚了20天小米12系列已确定获得国内的相关认证,从认证的信息来看小米12系列包含3款机型,小米12型号为2201123C,小米12Pro型号为2201122C,小米12X型号为2112123聚焦全球揭榜挂帅关键核心技术攻关项目发布(一)近期,小编梳理了建设高水平人才高地全球揭榜挂帅关键核心技术攻关项目发布(一)聚焦电子信息人工智能领域的项目,共23条。电子信息领域国内车队数据管理解决方案重大研发需求在智慧交通智能PLSQL语法手冊目录第一部分SQL语法部分3一CREATETABLE语句。这才是我认为目前最均衡的华为旗舰手机!我为什么推荐P40Pro?前段时间单位升级电信5G套餐,免费将大家的4G网络升级至5G,望着手里的P50Pro,同事默默的说了一句,唉,失算了。我的这个同事一直是华为的忠实粉丝,每一年都要购买一部华为的旗舰硬件音质全面升级,南卡LitePro2蓝牙耳机轻体验说到蓝牙耳机,如今市面上真无线蓝牙耳机的款式是越来越丰富和多元化了,有入耳式的有半入耳式有耳挂式等等。对V叔来说,想要选择一款造型特别以及音质不错的蓝牙耳机才是最重要的,不然满大街智能手机OEM厂商正在转向更高的相机分辨率和更少的摄像头配置北京商报讯(记者石飞月)12月9日,据研究机构Omdia最新的智能手机型号市场追踪发现,由于持续的供应链短缺继续影响行业,2021年第三季度,三摄像头智能手机的出货量增加到与四摄像打破外部限制,华为正自研射频芯片旗舰手机重回5G华为最近的处境相信大家也见识到了,由于外部因素限制,台积电无法为华为代工麒麟芯片,这也导致了华为手机业务无法开展,虽然在限令到来之前,囤了有一大批,但两年的时间里,麒麟库存也逐渐的移动支付数字货币,这些正给非洲带来哪些变化?来源澎湃新闻数字货币全球实践移动支付数字货币正给非洲带来哪些变化编者按数字货币作为时代创新的产物,初露峥嵘。数字货币为何而生?在数字货币领域抢先试水的国家如今境遇如何?未来的货币竞苹果被判侵权!人民的名义获赔1200余万元你知道中文在线吗?中文在线集团是中国数字出版的开创者之一,也是全球最大的中文数字出版机构之一。这样说你可能还不懂,但如果我说人民的民义康熙大帝国家公诉你一定会熟悉,这些都是中文在线继华为之后,谁将扛起国产手机的领军大旗,和苹果掰手腕?华为之后,不论谁扛起国产手机领军大旗,都无法与苹果掰手腕,因为他们没有核心技术,芯片系统都用国外的,怎么竞争?更何况,我以为,下一个能扛起国产手机大旗的依然是华为,没有第二个!有可疯狂冲击高端市场,苹果三星已争破头!手机厂商未来出路在哪?手机厂商的出路就是在不断地突破自我中寻求变革,直到这个产品能够适应普遍性了之后也算是找到了一个暂时的出路,让自己在市场上能够统领一个阶段,对于手机厂家来说十年二十年之后会是怎么样的