这篇文章将为大家详细讲解有关Python如何实现http接口自动化测试,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
接口测试常用的工具有提琴手,邮递员,jmeter等,使用这些工具测试时,需要了解常用的接口类型和区别,比如我用到的post和get请求,表面上看得到用于获取数据帖子用于修改数据,两者传递参数的方式也有不一样,得到是直接在url里通过,# 63;来连接参数,而文章则是把数据放在http的包体内(请求主体),两者的本质就是TCP链接,并无差别,但是由于http的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。具体的可以参考此博文,讲解的比较通俗易懂。这些在工具中可以直接选择,Python需要借助请求包。
确定好接口类型后,需要做的就是准备测试数据和设计测试用例了,测试用例比如说可以判断返回状态响应码,或者对返回数据进行判别等,具体可以参考邮递员中的echo.collections,对于Python可以用unittest来组织测试用例和添加断言进行判断。而对于测试数据的准备,需要做到数据和业务尽量分离,即将测试数据参数化,在工具中可以通过添加变量的形式实现,对于Python设计到的有关包有xlrd, json,如果需要连接数据库还需要mysql。
测试完成后生产报告或者发送邮件,也可以使用HTMLTestRunner和smtplib等。
我也从这三大方面进行总结:
请求库可以很好的帮助我们实现http请求,API参考文档,这里我创建了runmethod。py,里面包含RunMethod类:
#编码:utf - 8 进口unittest 进口json 进口HTMLTestRunner 从模拟进口模拟 从演示导入RunMain # 从runmethod进口runmethod 从mock_demo进口mock_test 进口操作系统 类TestMethod (unittest.TestCase): def设置(自我): # self.run=RunMain () self.run=RunMethod () def test_01(自我): url=& # 39; http://coding.imooc.com/api/cate& # 39; data=https://www.yisu.com/zixun/{ “时间戳”:“1507034803124”, “uid”:“5249191”, “uuid”:“5 ae7d1a22c82fb89c78f603420870ad7”, “秘密”:“078474 b41dd37ddd5efeb04aa591ec12”, “令牌”:“7 d6f14f21ec96d755de41e6c076758dd”, “cid”:“0”, 错误代码:1001 } # self.run.run_main=mock.Mock (return_value=数据) res=mock_test (self.run.run_main、数据url,“后”,数据) # res=self.run.run_main (url,“文章”,数据) 打印(res) self.assertEqual (res(“错误代码”),1001年,“测试失败”) @unittest.skip (“test_02”) def test_02(自我): url=' http://coding.imooc.com/api/cate ' data={ “时间戳”:“1507034803124”, “uid”:“5249191”, “uuid”:“5 ae7d1a22c82fb89c78f603420870ad7”, “秘密”:“078474 b41dd37ddd5efeb04aa591ec12”, “令牌”:“7 d6f14f21ec96d755de41e6c076758dd”, “cid”:“0” } res=self.run.run_main (url,‘得到’,数据) self.assertEqual (res(“错误代码”),1006年,“测试失败”) def test_03(自我): url=' http://coding.imooc.com/api/cate ' data={ “时间戳”:“1507034803124”, “uid”:“5249191”, “uuid”:“5 ae7d1a22c82fb89c78f603420870ad7”, “秘密”:“078474 b41dd37ddd5efeb04aa591ec12”, “令牌”:“7 d6f14f21ec96d755de41e6c076758dd”, “cid”:“0”, “状态”:11 } res=mock_test (self.run.run_main、数据url,‘得到’,数据) 打印(res) self.assertGreater (res(的状态),10日的测试通过的) if __name__==癬_main__”: filepath=os.getcwd () +“//report.html” fp=开放(filepath wb +) 套件=unittest.TestSuite () suite.addTest (TestMethod (test_01)) suite.addTest (TestMethod (test_02)) suite.addTest (TestMethod (test_03)) 跑步者=HTMLTestRunner。HTMLTestRunner(流=fp, title=罢馐茄菔静馐浴? runner.run(套房) # unittest.main ()