简介: 之前写过一篇关于nose使用方法的博客。最近在做一元乐购产品的接口测试,结合着python的requests库可以很方便的进行web接口测试并生成测试结果。接口测试脚本示例如下(脚本路径为“E:\forPytest\test_new_product_detail.
之前写过一篇关于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 = "1"
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 = "1"
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 = "1"
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接口测试了,非常好用。
干货分享
如果你已经工作但是经常觉得难点很多,觉得自己测试方面学的不够精想要继续学习的,想转行怕学不会的,都可以关注我【软件测试小dao】,公众号内可领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!