python 调用其他文件夹的sh脚本 python调用另一个文件_python 调用其他文件夹的sh脚本

简单说明

python 调用其他文件夹的sh脚本 python调用另一个文件_中的push_02


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

在平常写脚本过程中,我经常会在同一个py文件中,把相关接口的调用方法都写好,这样在同一个文件中能够很方便的进行调用;  


后来随着功能增多,在写其他py文件时,有时也会先调用某个相同的接口来获取参数;   如果在每个py文件中都写一遍调用某个接口的方法,会显得很啰嗦,也不好维护,并且以后万一提供数据的那个接口发生变化,需要调整很多地方;  

所以,当我们在一个用例py文件中写好某个接口调用方法,后续如果在其他py文件中也要用到这个接口的返回值,则直接引用先前py文件中定义好的接口调用方法即可。

实例

python 调用其他文件夹的sh脚本 python调用另一个文件_中的push_02

接口功能说明:  

A接口--调用A接口可以生成一条数据,每条数据对应一个id 

B接口--调用B接口可以返回一条数据的详情,但是调B接口时,需要一个必要参数即数据id    

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

内容如下

import unittestimport requestsimport jsonclass 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  内容如下

import unittestfrom create_activity import CreateActivityimport requestsimport jsonclass OperateActivity(unittest.TestCase):    def setUp(self):        ………………        一些必要的初始化工作,例如读取配置文件、调用其他方法等        ………………    def view_activity(self, id):    """执行查看数据详情接口"""        ………………        payload = self.view_payload        payload["bizId"] = id        ………………        response = requests.post(self.url, json=payload, headers=headers)        data = response.json()           ………………        try:            self.assertEqual(response.status_code, 200)            self.assertEqual(data["msg"], "操作成功")            self.assertEqual(data["errcode"], 0)        except Exception as e:            logger.error("接口错误信息为  %r", e)            print("headers信息:", headers)            print("请求地址:", response.url)            print("参数信息:", payload)            raise e    def test_case_01(self):    """查看活动数据详情case"""        try:            temp = CreateActivity()  # 调用CreateActivity类,得到一个实例temp            temp.setUp()  # 通过实例调用CreateActivity类下的setUp和tearDown方法,进行初始化            temp.tearDown()            data = temp.push_file_download(xxx)  # 调用CreateActivity类下的push_file_download方法,得到其返回的数据            if data is not None:                id = data["Id"]  # 提取生成数据的数据id                self.view_activity(id)  # 调用当前文件下的view_activity方法,查看数据详情            ………………        except Exception as e:            logger.error("用例执行错误信息:%r", e)            print("用例执行错误信息:", e)            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类,得到一个实例temptemp.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方法所需的一些条件);