zoukankan      html  css  js  c++  java
  • 论《unittest框架中测试用例依赖的解决》重要性

    论一下unittest测试框架间测试用例依赖的重要性,是值得每一个自动化开发工程师,必修的武功宝典了,且解决方法的姿势也有千差万别,且跟我细细品尝。

    使用公共方法,在其他用例获取Token值
    class InvestTests(unittest.TestCase):
    
        @classmethod
        def setUpClass(self):
            pass
    
        @classmethod
        def tearDownClass(self):
            pass
    
        def setUp(self):
            self.baseurl = "http://218.17.157.55/:18087"
            self.headers = {"Content-Type":"application/json"}
    
        def tearDown(self):
            pass
        
        def getToken(self,username):
            url = self.baseurl + "/pj-common/login"
            payload = {"username":username,"password":"123456w","imageCode":"111111","clientType":"WEB"}
            response = requests.post(url, headers=self.headers,json=payload)
            rsp = response.json()
            if rsp:
              return  rsp["data"]["token"]
                
        def test_invest(self):
            #获取Token
            token = self.getToek(username='123')
            #出借
            try:
                if token:
                    self.headers.update({"Authorization": "Bearer %s" % self.token})
                    url = self.baseurl + "/pj-p2p-core/appFront/planInvest/v3.0/submitInvestOrder"
                    payload = {"investAmt":int(300),"couponId":-1,"planId":int(49)} # 出借30天产品
                    response = requests.post(url,headers=self.headers,json=payload)
                    if response.status_code == 200:
                        print("出借成功1笔")
                    else:
                        print("出借失败1笔")   
                else:
                    print("没有获取到token!!!")
            except Exception as e:
                print(e)
            
    优缺点:
    优点是用例需要的token参数,不会受到其他用例的影响
    确定是每次请求动作,都需要执行一次登录获取token的接口,对接口的请求频繁
    
    
    使用全局变量
    # 全局变量,解决用例间的依赖
    global token
    class InvestTests(unittest.TestCase):
    
        @classmethod
        def setUpClass(self):
            pass
    
        @classmethod
        def tearDownClass(self):
            pass
    
        def setUp(self):
            self.baseurl = "http://218.17.157.55:18087"
            self.headers = {"Content-Type":"application/json"}
    
        def tearDown(self):
            pass
    
        def getToken(self,username):
            url = self.baseurl + "/pj-common/login"
            payload = {"username":username,"password":"123456w","imageCode":"111111","clientType":"WEB"}
            response = requests.post(url, headers=self.headers,json=payload)
            rsp = response.json()
            global token
            if rsp:
                print(rsp["data"]["token"])
                token = rsp["data"]["token"] #需要传出去的参数 -- 设置成全局变量
    
        def test_001_login_200(self):
            self.getToken(username='13715384224')
    
    
        def test_002_invest_200(self):
            
            #出借
            try:
                if token:
                    self.headers.update({"Authorization": "Bearer %s" % token})
                    url = self.baseurl + "/pj-p2p-core/appFront/planInvest/v3.0/submitInvestOrder"
                    payload = {"investAmt":int(300),"couponId":-1,"planId":int(49)} # 出借30天产品
                    for num in range(int(1)):
                        response = requests.post(url,headers=self.headers,json=payload)
                        if response.status_code == 200:
                            print("出借成功1笔")
                        else:
                            print("出借失败1笔")
                else:
                    print("没有获取到token!!!")
            except Exception as e:
                print(e)
    
    
    

    使用setUpClass方法和类方法

    # 使用classmethod方法,执行unittest框架时只获取一次token,解决用例间的依赖
    
    class InvestTests(unittest.TestCase):
    
        @classmethod
        def getToken(cls,username):
            url = cls.baseurl + "/pj-common/login"
            payload = {"username":username,"password":"123456w","imageCode":"111111","clientType":"WEB"}
            response = requests.post(url,json=payload)
            rsp = response.json()
            if rsp:
                print(rsp["data"]["token"])
                return rsp["data"]["token"] #需要传出去的参数 
    
    
        @classmethod
        def setUpClass(cls):
            cls.baseurl = "http://218.17.157.55:18087"
            cls.headers = {"Content-Type":"application/json"}
            cls.token = cls.getToken(username='13715384224')
    
        @classmethod
        def tearDownClass(self):
            pass
    
        def setUp(self):
            self.baseurl = "http://218.17.157.55:18087"
            self.headers = {"Content-Type":"application/json"}
    
        def tearDown(self):
            pass
    
       
    
        def test_001_login_200(self):
            pass
    
    
    
        def test_002_invest_200(self):
            
            #出借
            try:
                if self.token:
                    self.headers.update({"Authorization": "Bearer %s" % self.token})
                    url = self.baseurl + "/pj-p2p-core/appFront/planInvest/v3.0/submitInvestOrder"
                    payload = {"investAmt":int(300),"couponId":-1,"planId":int(49)} # 出借30天产品
                    for num in range(int(1)):
                        response = requests.post(url,headers=self.headers,json=payload)
                        if response.status_code == 200:
                            print("出借成功1笔")
                        else:
                            print("出借失败1笔")
                else:
                    print("没有获取到token!!!")
            except Exception as e:
                print(e)
    
  • 相关阅读:
    hdu 4002 Find the maximum
    hdu 2837 坑题。
    hdu 3123
    zoj Treasure Hunt IV
    hdu 2053 Switch Game 水题一枚,鉴定完毕
    poj 1430 Binary Stirling Numbers
    hdu 3037 Saving Beans
    hdu 3944 dp?
    南阳oj 求N!的二进制表示最低位的1的位置(从右向左数)。
    fzu 2171 防守阵地 II
  • 原文地址:https://www.cnblogs.com/yangsun/p/12458864.html
Copyright © 2011-2022 走看看