論《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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM