接口测试进阶篇

发表于:2019-3-26 10:36

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:秦无殇    来源:博客园

  1、准备工作
  a、本机已配置好Python 3.X开发环境。开发工具推荐PyCharm
  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 = "http://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")
   运行结果:
  以get接口为例,测试代码如下:
   1 #coding:utf-8
  2 #导入request库
  3 import  requests
  4 #请求URL
  5 url = "http://127.0.0.1:8089/login?username=vicent&tel=15209876533"
  6 res = requests.get(url=url)
  7 print(res.json())
    运行结果:
  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 = "http://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 = "http://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 = "http://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 = "http://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可以完成接口自动化框架的开发。

   相关推荐:接口测试入门篇 http://www.51testing.com/html/45/n-4457945.html

     上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号