Python nose单元测试框架结合requests库进行web接口测试
[本文出自天外归云的博客园]
之前写过一篇关于nose使用方法的博客。最近在做一元乐购产品的接口测试,结合着python的requests库可以很方便的进行web接口测试并生成测试结果。接口测试脚本示例如下(脚本路径为“E:\forPytest\test_new_product_detail.py”):
# -*- coding: utf-8 -*-
from nose.tools import nottest,istest,assert_equal,assert_in
from nose_ittr import IttrMultiplier, ittr
import requests,json '''
用户信息配置
'''
user1 = ""
user2 = ""
pwd = "" class TestNewProductDetail(object):
__metaclass__ = IttrMultiplier '''
非进行中商品
'''
@nottest
@ittr(productId=["2016101716PT022944258","2016101411PT022935002"],accountId=[user1,user2])
def test_new_product_detail_1(self):
s = requests.Session()
url = "https://api.winyylg.com/new_product_detail.html"
periodId = ""
data = {
"productId":self.productId,
"accountId":self.accountId,
"sessionId":getSessionId(s,self.accountId,pwd),
"periodId":periodId
}
r = json.loads(s.get(url=url,params=data).text)
if self.productId == "":
assert_equal(r["result"],-1,msg="productId is null or not exists.")
else:
assert_equal(r["result"],100,msg="result not 100")
basic_asserts(r) '''
没有sessionId
没有accountId
非进行中商品
'''
@nottest
@ittr(productId=["2016101716PT022944258"])
def test_new_product_detail_2(self):
s = requests.Session()
url = "https://api.winyylg.com/new_product_detail.html"
periodId = ""
data = {
"productId":self.productId,
"periodId":periodId
}
r = json.loads(s.get(url=url,params=data).text)
assert_equal(r["result"],100,msg="result not 100")
basic_asserts(r) '''
进行中商品
'''
@istest
@ittr(productId=["2016102016PT023048118"],accountId=[user1,user2])
def test_new_product_detail_3(self):
s = requests.Session()
url = "https://api.winyylg.com/new_product_detail.html"
periodId = ""
data = {
"productId":self.productId,
"accountId":self.accountId,
"sessionId":getSessionId(s,self.accountId,pwd),
"periodId":periodId
}
r = json.loads(s.get(url=url,params=data).text)
if self.productId == "":
assert_equal(r["result"],-1,msg="productId is null or not exists.")
else:
assert_equal(r["result"],100,msg="result not 100")
basic_asserts(r)
for coupon in r["participateInfo"]["couponList"]:
assert_coupon_fields(coupon)
print coupon @nottest
def basic_asserts(result):
print "\n"
tylan_assert_in("resultDesc",result)
tylan_assert_in("product",result)
tylan_assert_in("participateInfo",result)
tylan_assert_in("prizeUser",result)
tylan_assert_in("calculationDetailUrl",result)
tylan_assert_in("imageTextUrl",result)
tylan_assert_in("additionalModel",result)
tylan_assert_in("userParticipateRecords",result)
tylan_assert_in("pastDetails",result)
#print result["participateInfo"]
tylan_assert_in("couponList",result["participateInfo"])
#print result["participateInfo"]["couponList"] @nottest
def assert_coupon_fields(result):
tylan_assert_in("couponId",result)
tylan_assert_in("couponSchemeId",result)
tylan_assert_in("couponType",result)
tylan_assert_in("status",result)
tylan_assert_in("threshold",result)
tylan_assert_in("couponAmount",result)
tylan_assert_in("remainAmount",result)
tylan_assert_in("accountId",result)
tylan_assert_in("takenId",result)
tylan_assert_in("createTime",result)
tylan_assert_in("updateTime",result)
tylan_assert_in("activeTime",result)
tylan_assert_in("expireTime",result)
tylan_assert_in("expireDay",result)
tylan_assert_in("couponName",result)
tylan_assert_in("couponDesc",result)
tylan_assert_in("couponApply",result)
tylan_assert_in("couponApplyDesc",result) @nottest
def tylan_assert_in(a,b):
assert_in(a,b,msg=a+" not include in "+str(b)) @nottest
def getSessionId(session,accountId,pwd):
url = "https://hygtest.ms.netease.com/winyyg/scripts"
data = {
"username":accountId,
"password":pwd,
"tag":"winyylg_login"
}
r = json.loads(session.post(url,data).text)
return r[0][1] '''
新的奖品详情页接口,将原来的奖品详情页的两个接口合成了一个接口:
1. https://api.winyylg.com/product_detail.html
2. https://api.winyylg.com/participate_records.html
新的接口为:https://api.winyylg.com/new_product_detail.html
接口类型为:GET
改动:去掉historyAwardUrl
请求参数:
productId
accountId
sessionId
periodId
返回参数:
result
resultDesc
product
...
participateInfo
...
couponList
...
prizeUser
...
calculationDetailUrl
imageTextUrl
additionalModel
...
userParticipateRecords
pastDetails
'''
在命令行中用例所在的目录下执行命令“nosetests --with-html-output --html-out-file=test_result.html -v”(若想查看脚本中的输出需要在命令结尾再加一个“-s”):
生成的结果文件:
利用nose框架的assert方法、@istest和@nottest装饰器、@ittr装饰器(需安装传参插件)等封装可以很方便的进行测试,再结合python的requests库就可以进行web接口测试了,非常好用。
Python nose单元测试框架结合requests库进行web接口测试的更多相关文章
- 【转】使用Python的Requests库进行web接口测试
原文地址:使用Python的Requests库进行web接口测试 1.Requests简介 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写, ...
- Python nose单元测试框架的安装与使用
[本文出自天外归云的博客园] 安装(Python2下安装) pip install nose 原理与命名规则 Nose会自动查找源文件.目录或者包中的测试用例,符合正则表达式(?:^|[\b_\.%s ...
- 使用Python的Requests库进行web接口测试
1.Requests简介Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2 模块提 ...
- Python 单元测试框架系列:聊聊 Python 的单元测试框架(一):unittest
作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...
- (转)Python爬虫利器一之Requests库的用法
官方文档 以下内容大多来自于官方文档,本文进行了一些修改和总结.要了解更多可以参考 官方文档 安装 利用 pip 安装 $ pip install requests 或者利用 easy_install ...
- python nose测试框架全面介绍十---用例的跳过
又来写nose了,这次主要介绍nose中的用例跳过应用,之前也有介绍,见python nose测试框架全面介绍四,但介绍的不详细.下面详细解析下 nose自带的SkipTest 先看看nose自带的S ...
- python nose测试框架全面介绍七--日志相关
引: 之前使用nose框架时,一直使用--logging-config的log文件来生成日志,具体的log配置可见之前python nose测试框架全面介绍四. 但使用一段时间后,发出一个问题,生成的 ...
- python nose测试框架全面介绍六--框架函数别名
之前python nose测试框架全面介绍二中介绍了nose框架的基本构成,但在实际应该中我们也会到setup_function等一系列的名字,查看管网后,我们罗列下nose框架中函数的别名 1.pa ...
- Python爬虫利器一之Requests库的用法
前言 之前我们用了 urllib 库,这个作为入门的工具还是不错的,对了解一些爬虫的基本理念,掌握爬虫爬取的流程有所帮助.入门之后,我们就需要学习一些更加高级的内容和工具来方便我们的爬取.那么这一节来 ...
随机推荐
- fwrite()的返回值随着格式的不同返回值也不同;
常用地函数fwrite fwrite()的返回值随着格式的不同返回值也不同: 也是最近涉及到代码才注意到的,汗!!! 转载了一篇文章来说明这个问题:文章地址:http://blog.csdn.net/ ...
- zabbix主动被动模式说明/区别
说明:使用zabbix代理有很多好处,一方面可以监控不可达的远程区域:另一方面当监控项目数以万计的时候使用代理可以有效分担zabbix server压力,也简化分布式监控的维护. 具体:主动.被动模式 ...
- VI 基本可视模式
可视模式让你可以选择文件的一部分内容,以便作比如删除,复制等工作. 进入可视模式 v 用v命令进入可视模式.当光标移动时,就能看到有一些文本被高亮显示了,它们就是被选中的内容. 三种可视模式 v 一个 ...
- Nginx+FastCGI运行原理(一)
1 实战Nginx与PHP(FastCGI)的安装.配置与优化 1.1 什么是 FastCGI FastCGI是一个可伸缩地.高速地在HTTP server和动态脚本语言间通信的接口.多数流行的HTT ...
- Java用JSONObject-lib来解析json串
直接贴代码:(所需jar包:json-lib.jar,可能会关联一些其它的jar包,请自行搜索.) import java.util.ArrayList; import java.util.HashM ...
- 新浪安装weiphp2.0的方法
请安装此网页的方法来安装: https://coding.net/u/idoubi666/p/weiphp-sae/git
- PHP基本的语法以及和Java的差别
.表示字符串相加 ->同Java中的. $作为变量的前缀,除此之外.变量名称定义规则同Java 參数传递和方法返回时传引用须要加前缀& 演示样例代码: function f(&$ ...
- SharePoint 2013创建WCF REST Service
SharePoint 2013为开发者提供了丰富的REST API,方便了我们在客户端操作List中的数据.当然我们也可以在SharePoint 2013中创建自定义的REST Service,比如通 ...
- Oracle的执行计划(来自百度文库)
如何开启oracle执行计划 http://wenku.baidu.com/view/7d1ff6bc960590c69ec37636.html怎样看懂Oracle的执行计划 http://wenku ...
- python 并发编程(socketserver)
下面的例子是简单的ssh 登录,其实也就是客户端把指令发送给服务器.服务器把结果返还给客户端,客户端再在终端展现 服务端代码: #Author:BigBao #Date:2018/7/18 # 我们之 ...