十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章将为大家详细讲解有关Python如何实现http接口自动化测试,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
创新互联是专业的江西网站建设公司,江西接单;提供网站建设、网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行江西网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!接口测试常用的工具有fiddler,postman,jmeter等,使用这些工具测试时,需要了解常用的接口类型和区别,比如我用到的post和get请求,表面上看get用于获取数据post用于修改数据,两者传递参数的方式也有不一样,get是直接在url里通过?来连接参数,而post则是把数据放在HTTP的包体内(request body),两者的本质就是TCP链接,并无差别,但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。具体的可以参考此博文,讲解的比较通俗易懂。这些在工具中可以直接选择,python需要借助requests包。
确定好接口类型后,需要做的就是准备测试数据和设计测试用例了,测试用例比如说可以判断返回状态响应码,或者对返回数据进行判别等,具体可以参考postman中的echo.collections,对于python可以用unittest来组织测试用例和添加断言进行判断。而对于测试数据的准备,需要做到数据和业务尽量分离,即将测试数据参数化,在工具中可以通过添加变量的形式实现,对于python设计到的有关包有xlrd,json,如果需要连接数据库还需要mysql。
测试完成后生产报告或者发送邮件,也可以使用HTMLTestRunner和smtplib等。
我也从这三大方面进行总结:
1. 接口方法实现和封装
requests库可以很好的帮助我们实现HTTP请求,API参考文档,这里我创建了runmethod.py,里面包含RunMethod类:
这里需要注意就是python默认参数和可选参数要放在必选参数后面,对于相应数据使用json格式进行返回。参数verify=false表示忽略对 SSL 证书的验证。
2.组织测试和生成报告
使用unittest来组织测试、添加测试用例和断言,测试报告可以下载HTMLTestRunner.py并放在python安装路径lib下即可,代码如下:
#coding:utf-8 import unittest import json import HTMLTestRunner from mock import mock #from demo import RunMain from runmethod import RunMethod from mock_demo import mock_test import os class TestMethod(unittest.TestCase): def setUp(self): #self.run=RunMain() self.run = RunMethod() def test_01(self): url = 'http://coding.imooc.com/api/cate' data = { 'timestamp':'1507034803124', 'uid':'5249191', 'uuid':'5ae7d1a22c82fb89c78f603420870ad7', 'secrect':'078474b41dd37ddd5efeb04aa591ec12', 'token':'7d6f14f21ec96d755de41e6c076758dd', 'cid':'0', 'errorCode':1001 } #self.run.run_main = mock.Mock(return_value=data) res = mock_test(self.run.run_main,data,url,"POST",data) #res = self.run.run_main(url,'POST',data) print(res) self.assertEqual(res['errorCode'],1001,"测试失败") @unittest.skip('test_02') def test_02(self): url = 'http://coding.imooc.com/api/cate' data = { 'timestamp':'1507034803124', 'uid':'5249191', 'uuid':'5ae7d1a22c82fb89c78f603420870ad7', 'secrect':'078474b41dd37ddd5efeb04aa591ec12', 'token':'7d6f14f21ec96d755de41e6c076758dd', 'cid':'0' } res = self.run.run_main(url,'GET',data) self.assertEqual(res['errorCode'],1006,"测试失败") def test_03(self): url = 'http://coding.imooc.com/api/cate' data = { 'timestamp':'1507034803124', 'uid':'5249191', 'uuid':'5ae7d1a22c82fb89c78f603420870ad7', 'secrect':'078474b41dd37ddd5efeb04aa591ec12', 'token':'7d6f14f21ec96d755de41e6c076758dd', 'cid':'0', 'status':11 } res = mock_test(self.run.run_main,data,url,'GET',data) print(res) self.assertGreater(res['status'],10,'测试通过') if __name__ == '__main__': filepath = os.getcwd()+'\\report.html' fp = open(filepath,'wb+') suite = unittest.TestSuite() suite.addTest(TestMethod('test_01')) suite.addTest(TestMethod('test_02')) suite.addTest(TestMethod('test_03')) runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title='this is demo test') runner.run(suite) #unittest.main()