接口测试进阶篇

释放双眼,带上耳机,听听看~!

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\")

postRequestDemo

运行结果:接口测试进阶篇

以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())

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 = \"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可以完成接口自动化框架的开发。

给TA打赏
共{{data.count}}人
人已打赏
随笔日记

走进Java Map家族 (1) - HashMap实现原理分析

2020-11-9 3:49:26

随笔日记

CSS-颠覆传统的Grid

2020-11-9 3:49:28

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索