• 自动化测试===requests+unittest+postman的接口测试


    • postman是一个跨平台的接口测试工具,下载链接在这里:https://www.getpostman.com/

     

    • unittest是一个单元测试框架,python中安装:pip install unittest

     

    • requests是一个发送http请求的库,安装:pip install requests

      官方文档:http://docs.python-requests.org/en/master/user/quickstart/,

      中文文档:http://docs.python-requests.org/zh_CN/latest/user/quickstart.html

     

    以测试http://www.kuaidi100.com/query 为例:

    有一个汇通快递的单号:350757819118

    请求的url为http://www.kuaidi100.com/query?type=huitongkuaidi&postid=350757819118

    用postman调试接口:

    点击右上角的code,如下图:

    以python--requests的格式复制:

    复制得到的代码如下:

    
    
    import requests
    
    url = "http://www.kuaidi100.com/query"
    
    querystring = {"type":"huitongkuaidi","postid":"350757819118"}
    
    headers = {
        'cache-control': "no-cache",
        'postman-token': "9794775a-f3eb-0322-1365-01b775fa9925"
        }
    
    response = requests.request("GET", url, headers=headers, params=querystring)
    
    print(response.text)

    新建py文件,命名为kuaidi.py,对复制的代码稍作调整:

    
    
    import requests
    import unittest
    
    class KuaiDi(unittest.TestCase):
        def test_huitong_api(self):
            url = "http://www.kuaidi100.com/query"
            querystring = {"type":"huitongkuaidi","postid":"350757819118"}
            headers = {
            'cache-control': "no-cache",
            'postman-token': "9794775a-f3eb-0322-1365-01b775fa9925"
            }
            response = requests.request("GET", url, headers=headers, params=querystring).json()
            #print(response)
            self.assertEqual(response['status'],'200')    #断言
            self.assertEqual(response['message'],'ok')    #断言
    
    
    if  __name__ == '__main__':
        unittest.main()

    运行结果:

    举例测试:

    import requests
    import json
    import unittest
    import time
    from HTMLTestRunner import HTMLTestRunner  
    
    
    class MyTest(unittest.TestCase):
        def setUp(self):
            print("[+]start")
        
        def tearDown(self):
            print("[+]end")
        
        def zhongtong(self,type = "zhongtong", id = "719857434111"):
            self.url = "http://www.kuaidi100.com/query"
            self.params = {
            "type":type,
            "postid":id
            }
            self.headers={'user-agent': 'my-app/0.0.1'}
            r = requests.get(url = self.url, params = self.params , headers = self.headers)
            print(r.status_code)
            return r
    
            
    
    class ExpressInquiry(MyTest):
        def test001_type_valid(self):
            print("00001")
            zhongtong = self.zhongtong(type = "shentong")
            self.assertIn("快递公司参数异常",zhongtong.text)
        
        def test002_type_invalid(self):
            print("00002")
            zhongtong = self.zhongtong(type = "sssssssssssss")
            self.assertIn("参数错误",zhongtong.text)
    
        def test003_id_valid(self):
            print("00003")
            id = self.zhongtong(id = "719857434155")
            self.assertIn("交通工程学院菜鸟驿站",id.text)
    
        def test004_id_invalid(self):
            print("00004")
            id = self.zhongtong(id = "123")
            self.assertIn("参数错误",id.text)
        
        def test005_type_id_invalid(self):
            print("00005")
            type_and_id = self.zhongtong(type = "dads",id = "7777")
            #print(type_and_id.url)
            #print(type_and_id.text)
            self.assertIn("参数错误",type_and_id.text)
    
        def test006_type_id_null(self):
            print("00006")
            null = self.zhongtong(type = "", id = "")
            #print(null.url)
            #print(null.text)
            self.assertIn("参数错误",null.text)
    
    def suite():
        now = time.strftime("%Y-%m-%d %H_%M_%S")
        filename = './' + now + 'test_result.html'
        fp = open(filename,'wb')
        runner = HTMLTestRunner(stream = fp,   
                                       title = "快递查询接口测试报告",  
                                       description = "测试用例执行情况:")
    
    
        suite = unittest.TestSuite()
        suite.addTest(ExpressInquiry("test001_type_valid"))
        suite.addTest(ExpressInquiry("test002_type_invalid"))
        suite.addTest(ExpressInquiry("test003_id_valid"))
        suite.addTest(ExpressInquiry("test004_id_invalid"))
        suite.addTest(ExpressInquiry("test005_type_id_invalid"))
        suite.addTest(ExpressInquiry("test006_type_id_null"))
        #unittest.TextTestRunner().run(suite)
        
        runner.run(suite)
        fp.close()
        
    
    
    if __name__ == '__main__':
        #unittest.main(exit = False , verbosity = 2)
        #它是全局方法,把它屏蔽后,不在suite的用例就不会跑,exit = False表示中间有用例失败也继续执行;还有比较常用的verbosity=2,表示显示def名字
        
        suite()

     总结:

    postman可以帮助完成一半的工作

    unittest+requests可以实现断言,方便持续集成

    顺便提一下


    如果你也喜欢Python 这里有一群Python爱好者汇集在此。

    关注微信公众号:【软件测试技术】,回复 888,获取QQ群号。 

     

  • 相关阅读:
    FFTW使用小结
    CUDA -- 并行计算入门
    CUDA -- 深入理解threadIdx
    QT -- 新建线程的方法(四种办法,很详细,有截图)
    CUDA -- 性能剖析和Visual Profiler
    CUDA -- nvvp无法新建New Session(报错:can't find dependent DLL)
    CUDA -- cuda测试中的计时方式(程序/工具)
    VS/QT -- vs下QT设置.qss
    QT -- float转ushort,用QImage 显示32float格式图像(CV_32FC1)
    QSS -- Qt Widget用样式设置背景不成功的问题
  • 原文地址:https://www.cnblogs.com/botoo/p/8064458.html
Copyright © 2020-2023  润新知