python接口測試:在一個用例文件中調用另一個用例文件中定義的方法


說明

在進行接口測試時,經常會遇到不同接口間傳遞參數的情況,即一個接口的某個參數需要取另一個接口的返回值;

在平常寫腳本過程中,我經常會在同一個py文件中,把相關接口的調用方法都寫好,這樣在同一個文件中能夠很方便的進行調用;

后來隨着功能增多,在寫其他py文件時,有時也會先調用某個相同的接口來獲取參數;

如果在每個py文件中都寫一遍調用某個接口的方法,會顯得很啰嗦,也不好維護,並且以后萬一提供數據的那個接口發生變化,需要調整很多地方;

所以,當我們在一個用例py文件中寫好某個接口調用方法,后續如果在其他py文件中也要用到這個接口的返回值,則直接引用先前py文件中定義好的接口調用方法即可。

實例

接口功能說明:

A接口--調用A接口可以生成一條數據,每條數據對應一個id

B接口--調用B接口可以返回一條數據的詳情,但是調B接口時,需要一個必要參數即數據id

 

1、新建一個py文件,例如test_A.py

內容如下 

import unittest
import requests
import json



class CreateActivity(unittest.TestCase):
    """創建活動-測試用例"""

    def setUp(self):
        
        ………………

        一些必要的初始化工作,例如讀取配置文件、調用其他方法等
        ………………

    def push_file_download(self, xxx):
        """生成一條活動數據"""
            
        ………………
        ………………
        ………………

        response = requests.post(self.base_url+self.push_file_download_url, data=json.dumps(payload), headers=headers)

        data = json.loads(response.content)


        try:

            if data["data"] != {}:
                r_data = {
                    "Id": data["data"]["Id"]
                }
                return r_data
            else:
                print("返回結果為空或返回數據異常,請檢查接口")
                return None

        except Exception as e:
            logger.error("接口錯誤信息為  %r", e)
            print("headers信息:", headers)
            print("請求地址:", response.url)
            print("參數信息:", payload)
            raise e

    ………………
    ………………

在這個文件中創建了一個類:CreateActivity,繼承自unittest.TestCase

然后在setUp方法中進行了一些必要的初始化工作

最后創建了一個名為push_file_download的方法,它的作用就是調某個接口,來生成數據

 

2、新建另一個py文件,例如test_B.py

內容如下

 1 import unittest
 2 from create_activity import CreateActivity
 3 import requests
 4 import json
 5 
 6 
 7 
 8 class OperateActivity(unittest.TestCase):
 9     
10 
11     def setUp(self):
12         
13         ………………
14 
15         一些必要的初始化工作,例如讀取配置文件、調用其他方法等
16         ………………
17 
18     def view_activity(self, id):
19     """執行查看數據詳情接口"""
20 
21         ………………
22 
23         payload = self.view_payload
24         payload["bizId"] = id
25 
26         ………………
27 
28         response = requests.post(self.url, json=payload, headers=headers)
29         data = response.json()
………………
30 31 try: 32 self.assertEqual(response.status_code, 200) 33 self.assertEqual(data["msg"], "操作成功") 34 self.assertEqual(data["errcode"], 0) 35 36 except Exception as e: 37 logger.error("接口錯誤信息為 %r", e) 38 print("headers信息:", headers) 39 print("請求地址:", response.url) 40 print("參數信息:", payload) 41 raise e 42 43 44 def test_case_01(self): 45 """查看活動數據詳情case""" 46 47 try: 48 temp = CreateActivity() # 調用CreateActivity類,得到一個實例temp 49 temp.setUp() # 通過實例調用CreateActivity類下的setUp和tearDown方法,進行初始化 50 temp.tearDown() 51 data = temp.push_file_download(xxx) # 調用CreateActivity類下的push_file_download方法,得到其返回的數據 52 53 if data is not None: 54 id = data["Id"] # 提取生成數據的數據id 55 self.view_activity(id) # 調用當前文件下的view_activity方法,查看數據詳情 56 57 ……………… 58 59 except Exception as e: 60 logger.error("用例執行錯誤信息:%r", e) 61 print("用例執行錯誤信息:", e) 62 raise e

(1)首先導入了 CreateActivity類

(2)第18行,創建了一個名為 view_activity 的方法,它作用是查看數據詳情

(3)第44行,創建一條查看活動數據詳情的測試用例 test_case_01

接下來是重點:在這條用例下調用 view_activity 方法,而view_activity方法有一個必傳參數id,這個id就是由test_A.py文件中 CreateActivity 類下的 push_file_download 方法生成的;

 

所以這里要先調用下 push_file_download 方法,對應第48~51行代碼

 temp = CreateActivity()  # 調用CreateActivity類,得到一個實例temp
 temp.setUp()  # 通過實例調用CreateActivity類下的setUp和tearDown方法,進行初始化
 data = temp.push_file_download(xxx)  # 調用CreateActivity類下的push_file_download方法,得到其返回的數據

注意到上述代碼在對CreateActivity類進行實例化得到temp后,先調用了setUp方法;

因為CreateActivity類下的push_file_download要想正常運行,也依賴於setUp方法先進性初始化工作(例如讀取配置文件、調用其他方法等);

所以當跨文件調用push_file_download方法,對CreateActivity類進行實例化后,也需要先調用其setUp方法進行初始化工作,不然直接調用push_file_download方法的化,會報錯(由於缺少運行push_file_download方法所需的一些條件);

 

總結:說了這么多其實只是想要說明一點,當跨用例文件進行調用某個方法時,需要看下這個方法是否依賴於其他方法,如果有依賴的話,則需要先調用其將依賴的方法


免責聲明!

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



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