• 中美研究人员发现新型狗流感病毒 2019-05-29
  • 豫园商城升级改造:这些楼顶可见最好的风景--旅游频道 2019-05-14
  • 头条 —频道 春城壹网 七彩云南 一网天下 2019-05-14
  • 人为某种意识而奋斗是幸福的,获得成绩或成就更幸福。 2019-05-10
  • 【专题】省违反中央八项规定精神和“四风”问题线索举报平台 2019-05-09
  • 确定这是热身赛?吴前拼到大腿抽筋 拆绷带继续干 2019-05-09
  • 应对排放新规 大众德国工厂计划短暂停产 2019-04-26
  • 一师一团土地确权登记颁证工作全面展开 2019-04-26
  • 一语惊坛(5月31日):“我们不一样”,中国向世界许下一个承诺。 2019-04-22
  • 俄罗斯世界杯F组:球迷风采 2019-04-10
  • 5月份国民经济数据发布:中国经济持续稳中向好 2019-04-10
  • 贵州宣讲十九大:干部争当宣讲员 群众心窝暖洋洋 2019-03-25
  • 别空谈,说说看,这个“简单的逻辑关系”是什么关系? 2019-03-25
  • 快过闪电,MIUI 10与MIUI 9速度对比 2019-03-21
  • 泽州去年“免费教育”资金达5211万元 2019-03-19
  • 接口测试进阶篇

    快乐彩开奖号码 www.752o.com 1、准备工作

    a、本机已配置好Python 3.X开发环境??⒐ぞ咄萍鯬yCharm

    b、安装requests库,命令:pip install requests。

    c、准备好要测试接口的相关信息:请求url,header,body等。

    本次测试使用的接口是使用Django框架开发的简单接口,header为空,不涉及cookie,实际的接口测试过程中header一般不为空。

    2、编写接口测试代码

     以post请求为例,测试代码如下:

     1 #coding:utf-8
     2 #导入request库
     3 import  requests
     4 #请求URL
     5 url = "//127.0.0.1:8089/login/"
     6 #请求数据
     7 data = {
     8     "username":"stephen",
     9     "password":123456
    10 }
    11 #发送请求,一般还需要提供header信息,此处为demo,暂不关注
    12 reponse1 = requests.post(url=url,data=data)
    13 res_json = reponse1.json()
    14 print(res_json)
    15 flag =  reponse1.status_code == 200  and res_json["status"] == 200  and res_json["msg"]=="login sucesss"
    16 #假如http code为200,status为“200” msg为“login sucesss”则测试通过
    17 if flag:
    18     print("pass")
    19 else:
    20     print("fail")
    postRequestDemo

    运行结果:

    以get接口为例,测试代码如下:

     

    1 #coding:utf-8
    2 #导入request库
    3 import  requests
    4 #请求URL
    5 url = "//127.0.0.1:8089/login?username=vicent&tel=15209876533"
    6 res = requests.get(url=url)
    7 print(res.json())
    requestGetDemo

    运行结果:

    3、优化

    上面的代码虽然实现了接口自动化,但是代码不可复用。GET请求发送使用的是方法:requests.get,POST请求发送使用的是方法:requests.psot。

    可以编写一个函数,传入请求的类型是GET,还是POST或者其它的类型。

     1 #coding:utf-8
     2 #导入request库
     3 import  requests
     4 def http_run(method,url,data=None,headers=None):
     5     if method == "GET":
     6         res = requests.get(url=url,data=data,headers=headers)
     7     else:
     8         res =  requests.post(url=url,data=data,headers=headers)
     9     return res
    10 
    11 #case1 psot
    12 url = "//127.0.0.1:8089/login/"
    13 data = {
    14     "username":"stephen",
    15     "password":123456
    16 }
    17 #发送请求
    18 res = http_run("POST",url=url,data=data)
    19 #校验结果
    20 
    21 assert res.json()["status"] == 200
    22 #case2 get
    23 #发送请求
    24 url1 = "//127.0.0.1:8089/login?username=vicent&tel=15209876533"
    25 res1= http_run("GET",url=url1)
    26 #校验结果
    27 assert res1.json()["tel"] =="15209876533"

    4、引入unittest单元测试框架管理用例

    先将上面优化过的http_run方法,抽象成一个class,方便后续调用。

    1 import requests
    2 class http_run:
    3     def http_run(self,method,url,data=None,headers=None):
    4         if method == "GET":
    5             res = requests.get(url=url,data=data,headers=headers)
    6         else:
    7              res =  requests.post(url=url,data=data,headers=headers)
    8         return res
     1 #导入unittest包
     2 import unittest
     3 #定义一个class http_test,继承于unittest.TestCase
     4 class http_test(unittest.TestCase):
     5     #在每个测试用例执行前运行的方法
     6     def setUp(self):
     7         print("run before test case")
     8         #实例化 http_run
     9         self.run = http_run()
    10 
    11     #测试用例,必须以test开头
    12     def test_get(self):
    13         url1 = "//127.0.0.1:8089/login?username=vicent&tel=15209876533"
    14         res = self.run.http_run("GET",url1)
    15         print(res.json())
    16         self.assertEqual(res.json()["tel"],"15209876533")
    17     def test_post(self):
    18         url = "//127.0.0.1:8089/login/"
    19         data = {
    20               "username":"stephen",
    21                "password":123456
    22         }
    23         res = self.run.http_run("POST",url,data)
    24         print(res.json())
    25         self.assertEqual(res.json()["status"],200)
    26     #在每个测试用例执行后运行的方法
    27     def tearDown(self):
    28         print("run after test case")
    29 if  __name__ == "__main__":
    30     #创建测试套
    31     suite = unittest.TestSuite()
    32     #往测试套中添加用例
    33     suite.addTest(http_test("test_get"))
    34     suite.addTest(http_test("test_post"))
    35     runner = unittest.TextTestRunner()
    36     #运行测试用例
    37     runner.run(suite)

    运行结果:

    unittest除了用于写单元测试外,还可以完成接口自动化,基于unittest可以完成接口自动化框架的开发。

    posted @ 2019-03-16 20:09 秦无殇 阅读(...) 评论(...) 编辑 收藏
  • 中美研究人员发现新型狗流感病毒 2019-05-29
  • 豫园商城升级改造:这些楼顶可见最好的风景--旅游频道 2019-05-14
  • 头条 —频道 春城壹网 七彩云南 一网天下 2019-05-14
  • 人为某种意识而奋斗是幸福的,获得成绩或成就更幸福。 2019-05-10
  • 【专题】省违反中央八项规定精神和“四风”问题线索举报平台 2019-05-09
  • 确定这是热身赛?吴前拼到大腿抽筋 拆绷带继续干 2019-05-09
  • 应对排放新规 大众德国工厂计划短暂停产 2019-04-26
  • 一师一团土地确权登记颁证工作全面展开 2019-04-26
  • 一语惊坛(5月31日):“我们不一样”,中国向世界许下一个承诺。 2019-04-22
  • 俄罗斯世界杯F组:球迷风采 2019-04-10
  • 5月份国民经济数据发布:中国经济持续稳中向好 2019-04-10
  • 贵州宣讲十九大:干部争当宣讲员 群众心窝暖洋洋 2019-03-25
  • 别空谈,说说看,这个“简单的逻辑关系”是什么关系? 2019-03-25
  • 快过闪电,MIUI 10与MIUI 9速度对比 2019-03-21
  • 泽州去年“免费教育”资金达5211万元 2019-03-19
  • 如何投资高频彩 河北快3和值总合走势 七星彩走势图表预测图 热血传奇客户端多大 大星彩票走势图 水果大爆发援彩金 山西彩票论坛 辽宁11选5对刷 幸运龙宝贝网页 apex英雄官网橘子 北京赛车直播苹果手机 热火vs凯尔特人第六场 35选7开奖时间每周几 快速赛车全天计划 网游御龙在天凉了没 apex英雄几个英雄