后端开发|Python教程
python,requests,unittest ,API接口
后端开发-Python教程
黑熊在网上查找了下接口测试相关的资料,大都重点是以数据驱动的形式,将用例维护在文本或表格中,而没有说明怎么样去生成想要的用例,
网页棋盘源码一键安装,ubuntu安装到系统,爬虫爬水文数据,php suggest,谷歌seo运营lzw
问题:
快捷微投票系统源码,ubuntu装完无法开机,什么网页可以爬虫,php视频教程免费网站外包学习,黔南seo优化lzw
测试接口时,比如参数a,b,c,我要先测a参数,有(不传,为空,整形,浮点,字符串,object,过短,超长,sql注入)这些情况,其中一种情况就是一条用例,同时要保证b,c的正确,确保a的测试不受b,c参数的错误影响
8圈网吧系统源码,ubuntu qt无法运行,七牛云日志导出tomcat,爬虫轰炸代码,php评论页面怎么弄,seo提升软件lzw
解决思路:
符合接口规范的参数可以手动去填写,或者准备在代码库中。那些不符合规范的参数(不传,为空,整形,浮点,字符串,object,过短,超长,sql注入)也可以准备在库中作为常量反复使用
主要实现的功能点:
1.api参数整理到dict中,方便组合参数生成用例
2.对生成的用例进行循环执行
3.封装些许代码便于使用和维护
源码分析:
canshuxinxi.py文件用来存放api接口信息。以dict形式存放,这样就可以API_ALL[‘登录接口’][url]这种方式去取,看起来较直观,知道取得是哪个接口的那部分信息。
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : -06-09 14:09# canshuxinxi.py# 接口信息API_ALL = { 登录接口: { umber: 1, url: \, leixing: post, head: { aa: b, cc: dd, }, canshu: { username: Wbfxs001, password: 111111Qq, grant_type: password, }, qiwang: { code: 200, ame: Wbfxs001, }, }, 退出接口: { umber: 1, url: \, leixing: get, canshu: { username: Wbfxs001, password: 111111Qq, grant_type: password,} }}
changliang.py文件用来存非常规(可能会让接口响应异常)参数,同理也是存放在dict中,方便维护,比如以后要加新的sql注入代码段,可以直接在后面添加
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : -06-09 14:09# changliang.py# 常用参数不传,为空,整形,浮点,字符串,object,过短,超长,sql注入objects1 = xxxxobjects2 = ssssHCS = { 为空: [\], 整形: [10, 23, 44, 88, 99], 浮点: [1.11, 2.342, -1.03], 字符串: [aaaa, bbb, cccc,dddd], object: [objects1, objects2], 过短: [1, ], 超长: [11111111111111111111111111111111111111111111111], sql注入: [;and 1=1 ;and 1=2, ";and (select count(*) from sysobjects)>0 mssql", ";and 1=(select IS_SRVROLEMEMBER(sysadmin));--"], }
# gongju.py作为工具类,下面方法进行了封装,方便调用。实现了对参数进行组合,生产不同组合的dict类型的参数,并将dict参数保存到list中,方便取用。
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : -06-09 14:11# gongju.py# 生成不同组合的参数class gj(): def listalls(self, csTrue, csFalse): fzgcs = [] # 得到cycanshu的key,将所有非正规参数放在一个list中 listall = [] # 保存参数dict 为 list zhcs = dict(csTrue) listall.append(csTrue) aaa = list(csFalse.keys()) for i in aaa: bbb = csFalse[i] # 得到具体参数list for k in bbb:fzgcs.append(k) # 便利每一个参数加入fzgcs列表 zhcskey = list(zhcs.keys()) # 拿到将要进行组合的参数 for i in zhcskey: a = zhcs[i] # 保留原有的参数值,下面替换完后复原正确参数 for k in fzgcs:zhcs[i] = klistall.append(str(zhcs)) # 循环完后复原正确参数 zhcs[i] = a return listall
jiaoben.py文件作为脚本类,用来对组合好的参数进行循环执行,依次带入组合参数请求。(只做了请求和打印响应信息,可再加入对响应结果断言)
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : -06-09 14:22# jiaoben.pyfrom changliang import ZHCSfrom canshuxinxi import API_ALLfrom gongju import gjimport requests# 脚本类,组合工具参数进行请求gj = gj()def jball(): apikeys = API_ALL.keys() print(apikeys) for key in apikeys: apiname = key url = API_ALL[key][url] number = API_ALL[key][ umber] leixin = API_ALL[key][leixing] canshus = gj.listalls(API_ALL[key][canshu], ZHCS) if leixin == post: print("======="+" api名称:"+apiname+"=======") for cs in canshus:mp = requests.post(url=url, data=cs)fhcode = str(mp.status_code)xysj = str(mp.elapsed.microseconds)print("=响应=api编号:"+number+" 响应code:"+fhcode+" 响应时间:"+xysj) if leixin == get: print("======="+" api名称:"+apiname+"=======") for cs in canshus:mp = requests.get(url=url, data=cs)fhcode = str(mp.status_code)xysj = str(mp.elapsed.microseconds)print("=响应=api编号:"+number+" 响应code:"+fhcode+" 响应时间:"+xysj)jball()
tesone.py文件作为用例执行文件,熟悉unittest框架的都清楚其中的原理,就不做多介绍,黑熊主要用来控制脚本的执行,结合了unittest框架后,方便后续的扩展。
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : -06-09 8:53# tesone.pyimport requestsimport unittestimport timefrom jiaoben import jballclass testclassone(unittest.TestCase): def setUp(self): print(111) pass def test_1(self): jball()# 执行脚本 pass def tearDown(self): print(333) passif __name__ == \__main__: unittest.main()
最后附上用例执行后的效果图: