• python-requests数据驱动延伸


    在 python-requests模块的讲解和应用 基础上进行数据驱动的延伸

    task_01_requests.py

    #-*- coding:utf-8 -*-
    #task_01_requests.py
    
    # 1:利用requests模块,编写一个可以完成http的get请求以及post请求的类。
    # 2:利用登录和充值的两个数据,完成1中编写的类的单元测试(一条龙服务,包含测试报告)
    
    
    
    import requests
    class HttpRequests():
        def http_requests(self,url,params,http_mothed,cookies=None):
            if http_mothed=='get':
                res=requests.get(url,params,cookies=cookies)
                return res
            else:
                res=requests.post(url,params,cookies=cookies)
                return res

    task_02_requests.py

    #-*- coding:utf-8 -*-
    #task_02_requests.py
    
    #存放测试用例
    import unittest
    from study_181130_request.task_01_requests import HttpRequests
    
    COOKIES=None
    
    class TestHttpRequests(unittest.TestCase):
    
        # login_data={'mobilephone':18688773467,'pwd':'123456'}
        # login_data={'mobilephone':18688773467,'pwd':'1234567'}
        def setUp(self):
            # self.url='http://47.107.168.87:8080/futureloan/mvc/api/member/login'
            pass
        def __init__(self,url,param,http_method,excepted,methodName):#初始化传参;用初始化函数一定要记得去看看父类里面有没有初始化函数,如果有,需要超继承
            self.param=param#请求的数据
            self.http_method=http_method#请求方法
            self.url=url
            self.excepted=excepted
            super(TestHttpRequests,self).__init__(methodName)#超继承
    
    
        # def test_login(self):#登录成功 :手机号正确、密码正确;用例里面不可以传参数
        def test_api(self):#登录成功 :手机号正确、密码正确;用例里面不可以传参数
            global COOKIES#声明全局变量
            res=HttpRequests().http_requests(self.url,self.param,self.http_method,COOKIES)
            try:
                self.assertEqual(self.excepted,res.json()['msg'])
            except AssertionError as e:
                print('断言结果是:{}'.format(e))
                raise e
    
            if res.cookies:
                COOKIES=res.cookies#当res.cookies非空时,修改COOKIES的值
    
        # def test_error_pwd(self):#登录成功 :手机号正确、密码错误
        #
        #     res=HttpRequests().http_requests(self.url,self.param,self.http_method)
        #     try:
        #         self.assertEqual('用户名或密码错误',res.json()['msg'])
        #     except AssertionError as e:
        #         print('断言结果是:{}'.format(e))
        #         raise e
        #
        # def test_recharge(self):#充值成功
        #     # recharge='http://47.107.168.87:8080/futureloan/mvc/api/member/recharge'
        #     # recharge_data={'mobilephone':18688773467,'amount':'1000'}
        #     expected='充值成功'
        #
        #     res=HttpRequests().http_requests(recharge,recharge_data,'post',COOKIES)
        #     actual=res.json()['msg']
        #     self.assertEqual(expected,actual)
    
    
    
       # 数据驱动延伸--思路整理:
       #  先把可以参数化的login放到setUp()函数里,赋值给self.url
       #  再把请求数据login_data赋值给self.param和请求方法赋值给http_method放到初始化函数里;初始化函数不能直接重写,所以需要超继承
       #  参数化后要记得把函数里的参数改为参数化后的参数
       #  task_03_requests.py中创建实例的方法来添加用例;然后里面传参
       #  将login_data放到test_data列表中,然后利用for循环读取列表中的值,使suit.addTest()代码量减少
       #  然后再将放到test_data列表优化,加入http_method,列表里面嵌套字典
       #  添加充值的请求,此时url不能再放到setUp函数里面,可以放到test_data列表里面参数化
       #  test_api函数里面需要传入COOKIES参数,充值才能成功
       #  断言里面的期望值进行参数化

    task_03_requests.py

    #-*- coding:utf-8 -*-
    #task_03_requests.py
    
    
    import unittest
    import HTMLTestRunnerNew
    from study_181130_request.task_02_requests import TestHttpRequests
    # login_data_01={'mobilephone':18688773467,'pwd':'123456'}
    # login_data_02={'mobilephone':18688773467,'pwd':'1234567'}
    
    # test_data=[{'mobilephone':18688773467,'pwd':'123456'},{'mobilephone':18688773467,'pwd':'1234567'}]
    test_data=[{'param':{'mobilephone':18688773467,'pwd':'123456'},'http_method':'get','excepted':'登录成功',
                'url':'http://47.107.168.87:8080/futureloan/mvc/api/member/login'},
    
               {'param':{'mobilephone':18688773467,'pwd':'1234567'},'http_method':'post','excepted':'用户名或密码错误',
                'url':'http://47.107.168.87:8080/futureloan/mvc/api/member/login'},
    
                {'param':{'mobilephone':18688773467,'amount':'1000'},'http_method':'post','excepted':'充值成功',
                 'url':'http://47.107.168.87:8080/futureloan/mvc/api/member/recharge'}]
    
    
    suit=unittest.TestSuite()##装用例的地方
    for item in test_data:
        suit.addTest(TestHttpRequests(item['url'],item['param'],item['http_method'],item['excepted'],'test_api'))#创建实例的方法来添加用例
    
        # suit.addTest(TestHttpRequests(item,'get','test_login'))#创建实例的方法来添加用例
    # suit.addTest(TestHttpRequests(login_data_02,'post','test_login'))
    
    # loader=unittest.TestLoader()
    # suit.addTest(loader.loadTestsFromTestCase(TestHttpRequests))#通过loader从指定的测试类里面添加用例
    
    
    #执行用例
    with open('test_api.html','bw+') as file:
        Runner=HTMLTestRunnerNew.HTMLTestRunner(stream=file,verbosity=2,
                                                title='HTTP请求作业-单元测试报告',description='测试一下HTTP请求',tester='huimin'
                                                )
        Runner.run(suit)

    测试报告

  • 相关阅读:
    mysql查询版本
    mysql导出bug备注
    linux查找文件
    linux 编译式安装nginx
    linux文件校验
    linux 编译式安装apache
    网络层
    数据链路层
    物理层
    servlet过滤器
  • 原文地址:https://www.cnblogs.com/Aphrodite/p/10083198.html
Copyright © 2020-2023  润新知