[本文出自天外归云的博客园]
之前写过一篇关于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接口测试了,非常好用。