Python接口自动化测试——five

前言——Python+unittest+requests+HTMLTestRunne完整搭建


一、unittest是什么?

unittest是Python中的单元测试框架。它拥有支持共享搭建、自动测试、在测试中暂停代码、将不同测试迭代成一组。

二、完整的框架搭建

1.引入库

代码如下(示例):

from common.configHttp import RunMain
from common.heapcase import Heapcase  #此处为自己封装的一些辅助方法,后续会讲到
from readExcel import HandleExcel
import json
import unittest
import paramunittest

2.框架代码

代码如下(示例):

sheet = '用户'  # 通过变量sheet来选择要执行的用例
login_xls = HandleExcel().get_xls('userCase01.xlsx', sheet)


@paramunittest.parametrized(*login_xls)
class testUserLogin(unittest.TestCase):
    def setParameters(self, case_name, apitype, url, method, headers, params, expectValue, resultValue, run):
        self.case_name = str(case_name)
        self.apitype = str(apitype)
        self.url = str(url)
        self.method = str(method)
        self.headers = str(headers)
        self.params = str(params)
        self.expectValue = str(expectValue)
        self.resultValue = str(resultValue)
        self.run = str(run)

    def description(self):

        self.case_name

    def setUp(self):
        """
        方法名固定,在每个测试函数执行前,执行一次,多个测试函数,执行多次
        一般做初始化工作, 比如: 实例化一个浏览器、浏览器最大化、隐式等待设置等需要提前的操作
        :return:
        """

        print(self.case_name + "≮" + self.apitype + "≯" + "测试开始前准备")

    def test01case(self):
        self.checkResult()

    def tearDown(self):
        """
        方法名固定,在每个测试函数执行后,执行一次
        一般做结束工作: 比如: 推出浏览器、关闭浏览器
        :return:
        """
        print("测试结束,输出log完结\n\n")

    def checkResult(self):
        if self.run == "Y":
            token = Heapcase().get_token(13111111113)
            Headers = {"Content-Type": "application/json","authorization": token}  # 通过自己封装的方法获取token并合拼带headers中
            # 读取Excel表格参数内容
            case_name = json.loads(self.case_name)
            method = self.method
            url = self.url
            # 判断请求的接口是否有headers和data
            if self.headers == '':
                header = None
            else:
                header = Headers
            if self.params == "":
                body_data = None
            else:
                body_data = json.loads(self.params)
            res = RunMain().run_main(method, url, body_data, headers=header)
            # 对返回的参数进行断言(目前取返回的codo值断言,是不严谨的)
            expectValue = json.loads(self.expectValue)
            try:
                self.assertEqual(res['code'], expectValue)
                HandleExcel().write_list_to_xls('userCase01.xlsx', sheet, case_name, 7, 'PASS', 7)  # 测试通过后将结果写入Excel表格
                print("\033[36;0m测试通过\033[0m")
            except BaseException as e:
                HandleExcel().write_list_to_xls('userCase01.xlsx', sheet, case_name, 7, 'Fail', 2)  # 测试失败后将结果写入Excel表格
                print("\033[31;0m测试未通过,断言错误:\033[0m" + str(e))
                self.assertEqual(res['code'], expectValue)
            return res
        else:
            print("\033[33;0m该条用例开关未打开\033[0m")

下面这个链接是关于unittest的单独讲解

unittest详细讲解

总结

以上就是本次的讲解,如果大家有什么其他的想法可以一起学习,感谢…

### Python自动化脚本常见问题及解决方案 #### 一、测试用例管理 在自动化测试中,测试用例的管理和维护是一个重要的环节。如果缺乏有效的管理机制,可能会导致重复劳动或者遗漏某些关键测试点。为了应对这一挑战,可以采用结构化的测试框架来组织和运行测试用例[^2]。 ```python import unittest class TestExample(unittest.TestCase): def test_example(self): self.assertEqual(1, 1) if __name__ == '__main__': unittest.main() ``` 上述代码展示了如何利用 `unittest` 模块创建一个基本的单元测试类,并定义了一个简单的测试函数。通过这种方,能够更方便地扩展和执行多个测试用例。 --- #### 二、数据处理中的异常情况 当编写涉及大量数据操作的自动化脚本时,经常会遇到诸如缺失值、格不一致等问题。这些问题可能导致程序崩溃或结果偏差。因此,在设计脚本时应加入必要的输入验证逻辑以及错误捕获机制[^3]。 下面是一段关于数据清洗的例子: ```python import pandas as pd def clean_data(file_path): try: df = pd.read_csv(file_path) # 处理空值 df.fillna(value=0, inplace=True) # 转换特定列的数据类型 df['price'] = df['price'].astype(float) return df except Exception as e: print(f"Error occurred while processing data: {e}") return None ``` 此片段说明了怎样借助 Pandas 库读取 CSV 文件并对其中的内容初步清理工作的同时也考虑到了潜在的风险因素。 --- #### 三、权限不足引发的操作失败 有时即使脚本本身无误,但由于目标资源所在的环境设置不当(比如目录访问受限),仍可能致使命令无法顺利完成。针对这种情况,建议提前确认当前用户的授权状态再继续后续动作[^4]。 这里给出一段终止指定名称进程的小例子作为演示: ```python import psutil def kill_process_by_name(process_name): found = False for proc in psutil.process_iter(['pid', 'name']): if process_name.lower() in proc.info['name'].lower(): try: p = psutil.Process(proc.info['pid']) p.terminate() found = True except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess) as ex: print(f"Failed to terminate {proc.info['name']} due to error: {ex}") if not found: print(f"No running processes named '{process_name}' were detected.") ``` 该部分强调了对可能出现的各种例外情形出适当反应的重要性。 --- #### 四、定时任务调度不稳定 对于那些依赖于固定时间间隔触发的任务来说,网络延迟或者其他外部干扰都有可能影响其准时性。所以应该选用可靠的计划器组件并合理配置参数以增强稳定性。 示例如下所示: ```python from apscheduler.schedulers.background import BackgroundScheduler sched = BackgroundScheduler() @sched.scheduled_job('interval', minutes=5) def timed_job(): print("This job is run every five minutes.") sched.start() ``` 这段代码体现了 APScheduler 的简单应用模——周期性调用某个自定义的功能模块。 --- #### 五、日志记录不够详尽 最后一点就是忽视充分的日志文档编制,这会给后期排查故障带来极大不便。务必养成良好习惯,在关键时刻留下足够的线索以便追踪问题根源所在。 推荐法如下: ```python import logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)-8s %(message)s', datefmt='%Y-%m-%d %H:%M:%S') try: result = some_function_that_may_fail() except Exception as err: logging.error(f'Function failed with exception: {err}') else: logging.info('Operation completed successfully.') ``` 以上实例阐述了标准库 Logging 提供的服务及其优势。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值