接口之用例编写、验证

一、用Excel编写用例(xlsx格式)

截图仅供参考,实际用例编写需要根据实际情况来。

二、用例加载、验证

 1、数据的加载

import xlrd,xlwt
#python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库def datacel():try:filepath='.\\test_case\\jenkins_case.xlsx'file=xlrd.open_workbook(filepath)#打开excel文件工作簿me=file.sheets()[3]#指定到具体sheet4表nrows=me.nrows#读行数#用例IDlistid=[]# 用例名称listname = []# keylistkey = []#参数listcontent=[]#urllisturl=[]#请求方式listfangshi=[]#断言 期望值listqiwang=[]for i in range(1,nrows):listid.append(me.cell(i,0).value)listname.append(me.cell(i, 1).value)listkey.append(me.cell(i,2).value)listcontent.append(me.cell(i,3).value)listurl.append(me.cell(i,4).value)listfangshi.append(me.cell(i,5).value)listqiwang.append(me.cell(i,6).value)return listid,listname,listkey,listcontent,listurl,listfangshi,listqiwangexcept:print("数据错误,请检查表格")def makedata():listid, listname, listkey, listcontent, listurl, listfangshi, listqiwang=datacel()make_data=[]for i in range(len(listid)):make_data.append({'url':listurl[i],'key':listkey[i],'content':listcontent[i],'fangshi':listfangshi[i],'qiwang':listqiwang[i]})return make_dataif __name__ == '__main__':data_test = makedata()for i in range(len(data_test)):print(data_test[i])

2、数据使用

import unittest, requests
from ddt import ddt,data   #数据驱动
from unittest_excel.get_excel import makedata   #引用数据加载模块

data_exce=makedata()        #变量=makedata()返回值 list,每个元素是字典、用例

@ddt
class TestStringMethods(unittest.TestCase):def setUp(self):print('+++')def tearDown(self):print('---')@data(*data_exce)def test_url(self,data_exce):print(data_exce['url'])print(data_exce['key'])print(data_exce['content'])print(data_exce['fangshi'])print(data_exce['qiwang'])@data(*data_exce)def test_request(self,data_exce):r=requests.post(url=data_exce['url'],json=data_exce['key'])print(data_exce['url'],r.status_code)if __name__ == '__main__':unittest.main()

 3、单个目标验证

'''
这里暂时只比较了返回的value是否和预期一致的情况,没有比较目标的键值都相同以及目标的层级
dict:待测目标
objkey:目标key
objvalue:目标value
'''
def dict_get(dict, objvalue, default):tmp = dictfor k,v in tmp.items():# 如果dict中的value和目标value相同,则返回value,这里也可以改成键值都相等if v == objvalue:return velse:if (type(v).__name__ == 'list'):#如果类型是list,且不为空if len(v)>=1:for i in range(0,(len(v))) :ret= dict_get(v[i], objvalue, default)#递归调用,如果不是返回default,则跳出递归if ret is not default:return retif (type(v).__name__ == 'dict'):#如果类型是dict,且不为空if len(v)>=1:for i in range(0,(len(v))) :ret = dict_get(v, objvalue, default)#递归调用,如果不是返回default,则跳出递归if ret is not default:return retreturn default#找不到时返回的默认值if __name__ == '__main__':test={"sites": [{ "name":"test" , "url":"www.test.com" },{ "name":"google" , "url":"www.google.com" },{ "name":"weibo" , "url":"www.weibo.com" }]}a=dict_get(test,"www.weibo.co",'未找到')print(a)

4、整个response验证,这里是以单个目标验证为基础的方法

from Template_Log.log import LOG,logger
from unittest_t3.check_kv import   dict_get@logger('断言测试结果,通过返回pass,失败返回fail')
def assert_in(assert_hope,response):if len(assert_hope.split('=')) > 1:#目标示例: assert_hope:name=google&url=www.google.comdata = assert_hope.split('&')#分割后示例:[name=google,url=www.google.com]result = dict([(item.split('=')) for item in data])#分割后示例: {name:google,url:www.google.com}
value1=[]for value in result.values():s=dict_get(response, value, None)#期望的value和响应response对比,如果有相同就返回valueif (s != None):value1.append(s)else:return 'fail'print('断言通过,断言的实际值是:',value1)return  'pass'else:LOG.info('填写测试预期值')raise ('请填写期望值')

三、实例

import json,ddt
import unittest,requests
from Template_Log.log import LOG,logger#数据驱动
from unittest_t2.get_excel import makedata
from unittest_t3.check_all import assert_in
from unittest_t3.xmltojson import Xml2Json
data_exce=makedata()@ddt.ddt
class TestStringMethods(unittest.TestCase):def setUp(self):LOG.info("start_here")def tearDown(self):LOG.info("end_here")@logger('进入用例test_insert')@ddt.data(*data_exce)def test_insert(self,data_exce):r=requests.post(data_exce['url'],data=data_exce['key'])try:apijson = json.loads(r.text)except Exception:apijson = Xml2Json(r.text).resultprint('返回结果:', r.json())print('期望值:',data_exce['qiwang'])LOG.info('返回结果:%s'%apijson)qingwang=assert_in(data_exce['qiwang'],apijson)LOG.info('断言结果:%s'%qingwang)self.assertEqual(qingwang,'pass',msg='预期和返回一致')if __name__ == '__main__':unittest.main()

 

转载于:https://www.cnblogs.com/yinwenbin/p/10610986.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机二级word真题书娟,计算机二级word试题.docx

PAGEPAGE # / 80Word试题在考生文件夹下打开文档 word.docx ,按照要求完成下列操作并以该文件名( word.docx )保存文档。某高校为了使学生更好地进行职场定位和职业准备,提高就业能力,该校学工处将于2013 年 4月 29 日(星期五) 19:30-21:30 在…

农场js_通过销售农场商品来解释Web API

农场jsby Kevin Kononenko凯文科诺年科(Kevin Kononenko) 通过销售农场商品来解释Web API (Web APIs explained by selling goods from your farm) If you have been to a farmer’s market or farm stand, then you can understand the concept of an application programmin…

python安装pyqt4_windows下安装PyQt4

第一步:确认自己电脑上的Python版本。然后下载对应的.whl文件下载第二步:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyqt4上下载对应版本版本的.whl文件。例如cp-27-cp27m就代表是python2.7的版本。如果要下载python3.6且电脑是64位的则需要下载PyQt…

repcached配置与简单測试

安装libevent-devel进行configure。安装在文件夹/usr/local/repcached下编译安装完毕启动11211节点启动11212节点编写文件验证复制(分别向1、2节点存入数据,验证复制)ruby执行结果

为Activity设置特定权限才能启动

1.在AndroidManifest文件中&#xff0c;声明一个权限&#xff0c;并在activity中添加属性 <!--声明权限&#xff0c;权限名一般为包名permission类名 --><permission android:name"com.jikexueyuan.notepad.specpermission.permission.MyAty"/> <acti…

nashPay项目遇到的问题

浏览器提示错误代码&#xff1a; Failed to load resource: net::ERR_CONNECTION_REFUSED 出现这个问题是core服务异常&#xff0c;重启core服务可解决 layUi 下拉框赋值 var loadZhongduan function (data) { admin.req({ url: baseUrl "shoukuanZhongduan/getList&quo…

使用Express在Node.js中实现非常基本的路由

by Pau Pavn通过保罗帕文(PauPavn) 使用Express在Node.js中实现非常基本的路由 (Really, really basic routing in Node.js with Express) The goal of this story is to briefly explain how routing works in Express while building a simple — very simple — Node app.这…

计算机抄作通用模块,通用命令行模块的设计及实现

摘要&#xff1a;自从上个世纪八十年代以来,图形用户界面得到快速发展,计算机逐渐进入各类企业,家庭,其应用得到广泛的推广.对比起命令行界面来说,图形界面在交互性上有着不可比拟的优势.但在一些需要执行大量重复性工作的方面,例如在系统管理上,命令行界面提供的脚本功能,能够…

python读写磁盘扇区数据_C++-如何直接读取Windows磁盘扇区的数据?

1.通过CreateFile系列来完成读写扇区可以通过CreateFile打开磁盘逻辑分区&#xff0c;还要通过SetFilePointer以文件操作的方式把指针移到要操作的磁盘扇区开始处&#xff0c;在定位到要访问的扇区开始位置后就可以通过ReadFile或WriteFile函数实施相应的读写访问了&#xff0c…

公司 邮件 翻译 培训 长难句 结课

今天结课啦。。。。。。 明天培训总结&#xff0c;讲翻译技巧总结。 1new forms of thoughts as well as new subjects for thought must arise in the future as they have in the past, giving rise to new standards of elegance. 2if the small hot spots look as expected…

元祖(转载)

一.基本数据类型  整数&#xff1a;int  字符串&#xff1a;str(注&#xff1a;\t等于一个tab键)  布尔值&#xff1a; bool  列表&#xff1a;list   列表用[]  元祖&#xff1a;tuple  元祖用&#xff08;&#xff09;  字典&#xff1a;dict注&#xff1a;所…

leetcood学习笔记-226- 翻转二叉树

题目描述&#xff1a; 第一次提交&#xff1a; class Solution(object):def invertTree(self, root):""":type root: TreeNode:rtype: TreeNode"""if not root:return Nonetemp root.leftroot.left root.rightroot.right temp# root.left,…

现代JavaScript中的精美图案:制冰厂

I’ve been working with JavaScript on and off since the late nineties. I didn’t really like it at first, but after the introduction of ES2015 (aka ES6), I began to appreciate JavaScript as an outstanding, dynamic programming language with enormous, expres…

惠普omen测试软件,双GTX1080奢华魔方PC 惠普OMEN X评测

惠普最近一段时间在游戏PC领域着力发力&#xff0c;桌面的暗影精灵家族热卖&#xff0c;如火如荼的势头终于传导到了台式机领域。而今&#xff0c;惠普也终于有了自己正统意义上的重型武器——桌面游戏台式机OMEN 900暗影精灵II 系列。今天我们就要为大家评测这款三万元的台式机…

python 清华镜像_Anaconda3清华镜像 V5.3.1 最新免费版

相关软件软件大小版本说明下载地址Anaconda3清华镜像是一款功能强大的python管理工具&#xff0c;此软件集成了Conda和Python等大量科学计算分析的包&#xff0c;可以帮助用户快速实现项目环境的配置&#xff0c;有需要的赶快来试试吧&#xff01;【功能特点】1、省时省心&…

Qt第五课 无构造函数可以接受源类型,或构造函数重载决策不明确

场景QJsonArray rgParams { 10, 20, 30, 40 };编译代码的时候出错&#xff0c;C11标准才支持这种类的初始化列表语法&#xff0c;因此如果当前VS的版本过低&#xff0c;必须调整已有的代码&#xff0c;例子如下&#xff1a;QJsonArray rgParams;rgParams.insert(0, 10);rgPar…

二. linux基础命令

linux的基本命令一般有100多个&#xff0c;多练就可以了&#xff1b; 如果登陆用户是root&#xff0c;那么是#&#xff1b;如果是其他用户&#xff0c;则显示的是$ 练习&#xff1a;基本命令 1.创建一个目录/data mkdir /data ls -ld /data 2.在/data下面创建一个文件oldboy.tx…

mac 没有所有开发者_为什么开发人员应该像产品所有者那样思考

mac 没有所有开发者by Sajal Sarwar Sharma通过萨加尔萨瓦夏尔马 为什么开发人员应该像产品所有者那样思考 (Why developers should think more like product owners) You have just deployed your long-awaited feature to production after a long and gruesome month of co…

程序员这样对待简历,你期望面试官怎么对待你?

为什么想到谈这个问题呢&#xff1f; 前段时间公司因业务扩展需要招聘几个研发、运维以及测试人员&#xff0c;在看面试者的简历时&#xff0c;发现很多人都没有认真的去对待简历&#xff0c;只是把招聘网站上的打印一下就好了&#xff01; 这就让我想问几个问题&#xff1a; 1…

mfc try catch 捕获并显示_“全栈2019”Java异常第十七章:Error该不该被捕获?

难度初级学习时间30分钟适合人群零基础开发语言Java开发环境JDK v11IntelliJ IDEA v2018.3友情提示本教学属于系列教学&#xff0c;内容具有连贯性&#xff0c;本章使用到的内容之前教学中都有详细讲解。本章内容针对零基础或基础较差的同学比较友好&#xff0c;可能对于有基础…