接口测试requestQ框架使用

使用python的requests进行封装了一个简单框架requestQ,正在试用

安装

pip install requestQ

使用

1.基本组成

  • dorequest #基本发起http请求的单元
  • item #对dorequest单元进行校验取值的单元,可视为一个接口测试的用例
  • Case/Cases #具体用例的概念,可以由多个item整合,公用变量

1.1 样例

from requestQ import item,Case,Cases
item1=item("name1",data1).expect('data.code').toBe(1).expect('data.status').toBeTruthy().save('data.token','token')
item2=item("name1",{"aaa":"asdada${token}"}).expect('data.code').toBe(1).expect('data.status').toBeTruthy()
...
Cases(Case("casename",item1,item2,...),Case(xxxx))

2.dorequest使用

from requestQ.package.dorequest import DoRequest
req= DoRequest()
# DoRequest 主要有三个方法
# 1. add_session_headers(header:dict) 添加公共的请求头,类似cookie
# 2. run(method: str, url: str, data=None, is_auto=True, **kwargs) 进行请求校验
# 3. commit() 对请求进行提交

# DoRequest 主要有三个常量
# req.status 查看执行状态
# req.e 查看执行错误
# req.is_commit 查看是否提交

2.1 add_session_headers的使用

#填写dict格式的请求头即可
req. add_session_headers({"cookie":"asdadad12123123"})

2.2 run的使用

#样例对百度进行访问
req.run("get","http://www.baidu.com")
#参数说明
# method 请求方法 get post 等,必填
# url 请求链接,必须要添加http或者https,必填
# data 请求体内容,支持dict格式,str格式,"xxx=yyy&sss=www"的格式,选填
# is_auto 是否自动提交,默认自动,即run方法后不需要再添加commit方法
# kwargs dict格式,选填,支持的名字暂时有:
#  files 格式str,上传文件的路径 
#  file_name 格式str,用于设置上传文件名称,不填默认文件名称
#  headers 格式dict,{xxx:yyy,sss:www} 设置请求头
#  session_headers 格式dict,{xxx:yyy,sss:www} 设置通用请求头
#  proxies 设置请求代理 格式 ip:port

2.3 commit的使用

req.commit()
#返回提交的结果或者报错

3 item使用

from requestQ import item
item(name: str,  data: dict, des='', func: str = 'http', priority='中')
#参数说明
# name 此条请求的名称,标识,唯一值,必填
# data dict格式,内容是func对应的参数,为了方便以后扩展使用,当前输入请求参数
# des  此条请求的描述,无相关作用,只是描述而已
# func str格式,默认是http请求,可扩展成mysql等
# priority str格式,没有作用,只是标注优先级,待报告中显示使用

# item主要有八个方法
# run(func) 此处是调试时使用,类似使用 item(xxx).run(Dorequest())
# debug(func) 此处是调试时使用,类似使用 item(xxx).debug(Dorequest()),中间有停顿,方便查看数据数据
# addLocal(local: dict, glo: dict) 此处添加本地变量和总变量,格式必须是加在run和debug之前
# save(catch: str, name: str, method: str = 'json', is_global=False)保存值到变量数据中
# expect(catch: str, method: str = 'json') 提取结果的值,用户后续处理,主要方法!
# print_log() 打印出运行日志
# do_req(func)  func(请求值,本地变量,公共变量),在run之前定义方法,提前处理请求的值
# do_res(func) func(结果值,本地变量,公共变量),在run之前定义方法,在校验前处理结果值


#item还有协助的方法,不参与用例,只是方便编写data的值
# fetch(url, data, replace=None)
# 使用方法,chrome浏览器中,在network中找到需要的请求,右击-复制-复制为fetch,
#然后直接黏贴,删除分号就可以使用,返回值为请求的data值,缺陷是无法获取到cookie的值
#raw(str) 
#使用方法,类似fiddler抓包,在raw页面,全选-复制,使用raw('''xxxx'''),黏贴即可解析过data的值

3.1 run/debug 的使用

item(name: str,  data: dict, des='', func: str = 'http', priority='中').run(Dorequest())
item(name: str,  data: dict, des='', func: str = 'http', priority='中').expect('data.code').toBe(1).debug(Dorequest())
#此时就直接运行脚本,查看结果
#此处的data可以支持参数化,格式为:${xxxx},这个xxxx的值为环境变量的key

3.2 addLocal的使用

item(name: str,  data: dict, des='', func: str = 'http', priority='中').addLocal({"a":1},{"b":2}).run(Dorequest())
#此处添加变量中的参数

3.3 save的使用

#样例
item(name: str,  data: dict, des='', func: str = 'http', priority='中').save("data.token","token").run(Dorequest())
#运行后,在localdict中添加了key为token,value为结果提取的值
#参数说明
save(catch: str, name: str, method: str = 'json', is_global=False)
#catch 抓取的方式:例如结果为{“data”:{"status":1,"list":[{"s":1},{"d":2}]}}
#取status的值为:data.status
#取s的值为 data.list.0.s
#name是暂存的值得key
#method是提取的方法,模式使用json模式,就是上述样例中的方法;还有regex和size
#regex是正则提取的方法,类似于xxx(.\+)1313
#size是直接返回值得长度

3.4 print_log的使用

item(name: str,  data: dict, des='', func: str = 'http', priority='中').run(Dorequest()).print_log()
#打印出日志信息

3.5 expect的使用

#样例
item("name1",{"aaa":"asdada${token}"}).expect('data.code')
#参数说明,参考save
#expect就是把值取出来,然后进行比较,比较的方法有:
#toBe(val)、notToBe(val)、notToBeNone()、toBeNone()、toBeTruthy()、toBeFalsy()、
#toBeGreaterThanOrEqual(num)、toBeGreaterThan(num)、toBeLessThan(num)、toBeLessThanOrEqual()
#toMatch(val)、notToMatch(val)、toContain(val)、notToContain(val)
#上述val为值,任何格式的值;num为数字;Match的val是正则

4 Case/Cases的使用

Case("casename",item(xxxx))
#Case 就是完整的一个用例的概念,有一个或者多个item组成
#参数说明:
#name,用例的名称
#items ,任意数量的item
#主要方法有两个:
# add_source(source, name) 用于扩展后续方法使用
# run( allow_print_detail=[], allow_print_res=True) 用于运行item

4.1 add_source的使用

#样例
Case(xxx).add_source(Domysql(),"mysql")
#用于后期扩展

4.2 run的使用

#样例
Case(xxx).run()
#参数说明
# allow_print_detail 格式:list,输入item的名字,显示具体的日志,默认不显示,选填
# allow_print_res 模式True,显示简单的运行结果,选填

Cases(Case(xx)...)
#运行执行的用例,无方法
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355