Python+unittest+Requests实现http接口测试

 

Python+unittest+Requests实现http接口测试

Python的优势:语法简洁优美, 功能强大, 标准库跟第三方库灰常强大,建议大家事先了解一下Python的基础;

unittest是python的标准测试库,相比于其他测试框架是python目前使用最广的测试框架。

Requests 是用Python语言编写,基于urllib,采用Apache2 Licensed开源协议的HTTP 库。它比urllib 更加方便,可以节约我们大量的工作,完全满足HTTP 测试需求。

 

话不多说,直接上代码,例子是一个登录接口的请求。

#coding=utf-8


import requests    #pip安装requests第三方库,然后引入
import json             #引入json标准库,美化json输出


url = 'http://***/account/login'
data = {
        "username":"***01",
        "password":"password",
}

result = requests.post(url,data).json()
print result

 

调用requests库中的post方法,会给出所需要的参数,传入上面定义的url和data参数,运行.py文件就执行了post请求。

       但是问题来了,这样做,代码的复用性基本不存在,所有这里我们就需要封装一下post请求的方法。执行程序时调用和这个方法就可以了。

# coding=utf-8


import requests  # pip安装requests第三方库,然后引入
import json  # 引入json标准库,美化json输出

# 定义一个方法,传入需要的参数url和data
def send_post(url=None,data=None ): 
    # 参数必须按照url、data顺序传入
    # 因为这里要封装post方法,所以这里的url和data值不能写死
    result = requests.post(url=url,data=data).json() 
    res = json.dumps(result,ensure_ascii=False,sort_keys=True,indent=2)
    print res


if __name__ == '__main__':
    url = 'http://***/account/login'
    data = {
        "username":"***01",
        "password":"password",
    }
    # 实例化send_post方法,并传入url和data值
    post = send_post(url=url,data=data)  

当然http请求不止有post一种,那么常见的请求方式还有get,那么同理可以写出get请求的方法,这里就不给大家贴代码了。

思考一下,如果我们要测试一个接口,是不是要考虑他的请求方式呢?那么以后我们要做接口自动化的时候是不是也可以根据接口的请求方式让程序选择我们之前封装好的请求方法呢,答案是肯定的。所以我们这里要把所有的请求方式都封装起来,根据接口的请求方式来调用请求方法;

# coding=utf-8

import requests
import json


class RunMain:

    def send_post(self, url, data):  # 定义一个方法,传入需要的参数url和data
        # 参数必须按照url、data顺序传入
        result = requests.post(url=url, data=data).json()  # 因为这里要封装post方法,所以这里的url和data值不能写死
        res = json.dumps(result,ensure_ascii=False,sort_keys=True,indent=2)
        return res
        # print res

    def send_get(self, url, data):
        result = requests.get(url=url, data=data)
        res = json.dumps(result,ensure_ascii=False,sort_keys=True,indent=2)
        return res

    def run_main(self, method, url=None, data=None):
        result = None
        if method == 'post':
            result = self.send_post(url, data)
        elif method == 'get':
            result = self.send_get(url, data)
        else:
            print "错误"
        return result


if __name__ == '__main__':
    url = 'http://***/account/login'
    data = {
        "username": "***01",
        "password": "password"
    }
    # 实例化RunMain类
    run = RunMain()
    res = run.run_main("post",url,data)
    print res

至此我们得请求方式就封装好了,可以根据不同的请求方式调用方法来得到相应的返回值了。

现在我们得到结果了,那我们怎么去验证得到的结果是否正确呢,这就用到了Python中比较主流的测试框架unittest,下边通过代码简单的写一下unittest的工作原理

#coding=utf-8
import unittest
class TestDemo(unittest.TestCase):
    def test_01(self):
        print "这是第一个测试用例"

    def test_02(self):
        print "这是第二个测试用例"

if __name__ == '__main__':
    # unittest.main
    # unittest框架的TestSuite()类是用来创建测试套件的。
    suite = unittest.TestSuite()
    # addTest()方法是将测试用例添加到测试套件中
    suite.addTest(TestDemo('test_01'))
    suite.addTest(TestDemo('test_02'))
    #run()方法是运行测试套件的测试用例,入参为suite测试套件。
    unittest.TextTestRunner().run(suite)

 

现在请求方法封装好了,unittest也有了,我们是不是写case然后利用unittest的TestCase执行用例就可以了。

# coding=utf-8

import unittest
import json
from requests_demo.demo04 import RunMain


class TestRun(unittest.TestCase):
    def setUp(self):
        self.run_main1 = RunMain()
    # 测试用例必须以test开头
    def test_01(self):
        url = 'http://***/account/login'
        data = {
            "username": "***01",
            "password": "password",
        }
        res = self.run_main1.run_main('post', url, data)
        #打印得到的结果
        print res
        #看返回值的类型,必须是字典dict才能取到报文中的字段值
        print type(res)
        #调试的时候看下得到的字段是是否正确
        print res['status']
        #unittest的断言方式,判断a,b是否一致
        #assertEqual(a,b,msg)
        self.assertEqual(res['status'], 0, "测试通过")


if __name__ == '__main__':
    #实例化TestSuite创建测试套件
    suite = unittest.TestSuite
    #把用例test_01添加到测试套件中
    suite.addTest(TestRun('test_01'))
    #run()方法是运行测试套件的测试用例,入参为suite测试套件。
    unittest.TextTestRunner().run(suite) 

们还可以利用HTMLTestRunner测试报告,HTMLTestRunnerPython 标准库的unittest 的一个展,它可以生成HTML测试报告。 

# coding=utf-8

import unittest
import HTMLTestRunner
from requests_demo.demo04 import RunMain


class TestRun(unittest.TestCase):
    def setUp(self):
        self.run_main1 = RunMain()

    # 测试用例必须以test开头
    def test_01(self):
        url = 'http://***/account/login'
        data = {
            "username": "***01",
            "password": "password",
        }
        res = self.run_main1.run_main('post', url, data)
        # 打印得到的结果
        print(res)
        # 看返回值的类型,必须是字典dict才能取到报文中的字段值
        print(type(res))
        # 调试的时候看下得到的字段是是否正确
        print(res['status'])
        # unittest的断言方式,判断a,b是否一致
        # assertEqual(a,b,msg)
        self.assertEqual(res['status'], 0, "测试通过")



if __name__ == '__main__':
    # 实例化TestSuite创建测试套件
    suite = unittest.TestSuite
    # 把用例test_01添加到测试套件中
    suite.addTest(TestRun('test_01'))
    # run()方法是运行测试套件的测试用例,入参为suite测试套件。
    # unittest.TextTestRunner().run(suite)
    file_path = "../report/test_report.html"
    fp = file(file_path, 'wb')
    reportRunner = HTMLTestRunner.HTMLTestRunner(stream=fp, title='***系统', description='测试报告')
    reportRunner.run(suite)
    fp.close()

    至此一个简单的利用Python+request+unittest的接口测试示例就结束了。留给大家一个问题,如果这样维护用例每次都要改代码是不是违背了做自动化的初衷呢?那我们如何利用这套框架来实现接口测试自动化呢?

  • 9
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Pythonunittest库提供了一种基于单元测试的测试框架,是一个方便易用的Python测试框架。使用unittest库进行接口自动化测试可以提高测试效率和质量,本文将分享如何使用Python unittest库搭建接口自动化测试框架。 第一步:安装Python unittest库 首先需要安装Python unittest库,Python unittest库是默认安装在Python中的,无需单独安装。 第二步:安装requests模块 接口自动化测试需要使用requests模块来发送HTTP请求、获取响应等操作,因此需要安装requests模块。使用pip安装requests命令如下: pip install requests 第三步:编写测试用例 使用unittest框架编写测试用例,首先需要导入unittest库并创建测试类,编写测试方法,方法名必须以test开头,并使用assert断言方法进行验证。例如: import unittest import requests class TestApi(unittest.TestCase): def test_get_users(self): url = 'http://localhost:8080/api/users' res = requests.get(url) self.assertEqual(res.status_code, 200) self.assertIsNotNone(res.json()) 第四步:执行测试用例 使用unittest框架执行测试用例,使用unittest.main()方法运行所有测试用例。例如: if __name__ == '__main__': unittest.main() 执行测试用例后,将输出测试结果,包括测试用例总数、成功数、失败数等。 第五步:持续集成 持续集成可以帮助实现自动化测试,可以将上述步骤集成到自动化测试框架中,提高测试效率和质量。使用持续集成工具,例如Jenkins,可以实现自动化测试的调度和执行,定期输出测试报告,是测试自动化化的不二选择。 在以上步骤中,请求地址和验证方法需要根据具体需求进行更改,但是编写测试用例的方法是类似的,熟练掌握unittest库可以快速搭建接口自动化测试框架,提高测试效率和质量。 ### 回答2: Python unittest requests 接口自动化测试框架搭建教程博客是指一篇博客文章,介绍如何使用Python unittestrequests库搭建接口自动化测试框架。该教程博客有如下几个方面: 1. 简单介绍Python unittestrequests库,以及它们在接口自动化测试中的使用; 2. 详细讲解如何安装Python unittestrequests库,并编写测试用例; 3. 讲解如何通过使用Python unittest的setUp()和tearDown()方法,在测试用例执行前后进行一些操作,以便更好地进行测试; 4. 介绍如何运行测试用例,并查看测试结果,以及如何进行测试报告生成; 5. 提供一些实例,展示如何使用Python unittestrequests库搭建接口自动化测试框架。 通过这篇教程博客,读者可以学习如何使用Python unittestrequests库搭建接口自动化测试框架,并且能够快速了解并掌握这种接口自动化测试方法的流程和基本方法。此外,该教程博客也提供一些实例,帮助读者更好地理解和应用这种方法。因此,这篇教程博客对于想要学习接口自动化测试以及深入了解Python unittestrequests库的读者来说,是一篇非常有价值的文章。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值