ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python接口测试:在一个用例文件中调用另一个用例文件中定义的方法

2020-07-10 20:01:56  阅读:244  来源: 互联网

标签:文件 调用 python 接口 用例 file download data CreateActivity


说明

在进行接口测试时,经常会遇到不同接口间传递参数的情况,即一个接口的某个参数需要取另一个接口的返回值;

在平常写脚本过程中,我经常会在同一个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方法所需的一些条件);

 

总结:说了这么多其实只是想要说明一点,当跨用例文件进行调用某个方法时,需要看下这个方法是否依赖于其他方法,如果有依赖的话,则需要先调用其将依赖的方法

标签:文件,调用,python,接口,用例,file,download,data,CreateActivity
来源: https://www.cnblogs.com/hanmk/p/13279637.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有