在先前的文章里,我们曾介绍过批量执行 Airtest 测试脚本的设计思路:
把测试脚本的实际业务代码全部封装到脚本执行方法当中。在主控脚本里,此脚本引入所有的测试脚本,并根据需求调用它们的脚本执行方法,如此便能够轻松实现于 Pycharm 中批量执行 AirTest 脚本的功能。
接下来,本文将在这一设计思路的基础上进行更进一步的封装,以达成实际的方法封装。
用例脚本分析
之前我们设计了3个测试脚本,截图如下,细心的同学会发现3个测试脚本中存在重复代码:
脚本的初始化
驱动driver的初始化操作
脚本执行后关闭浏览器操作
公共代码提取
我们将这些通用的代码提取出来,封装到独立的代码中
提取 用例执行前的初始化方法
提取 执行测试脚本
提取 关闭浏览器
提取 生成测试报告
提取 测试脚本执行
设计测试脚本执行基本方法:case_base.py
from airtest.core.api import *
from airtest.cli.parser import cli_setup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from airtest_selenium.proxy import WebChrome
from airtest.report.report import simple_report
class CaseBase:
def __init__(self):
"""
初始化测试用例脚本数据
"""
self.executable_path = 'D:/programs/chromedriver-win64/chromedriver.exe'
self.web_url = 'https://www.baidu.com/'
self.driver = None
def start_script(self) -> None:
"""
用例执行前的初始化方法
:return:
"""
# 初始化脚本
if not cli_setup():
auto_setup(__file__, logdir=True, devices=["Windows:///", ])
self.driver = WebChrome(executable_path=self.executable_path)
self.driver.implicitly_wait(20)
self.driver.maximize_window()
self.driver.get(self.web_url)
def close_script(self) -> None:
"""
关闭浏览器
"""
# 退出当前页面
self.driver.close()
def run_script_content(self, driver):
"""
执行测试脚本
"""
raise NotImplementedError("子类必须实现此方法")
def generate_report(self) -> None:
"""
生成测试报告
"""
simple_report(__file__, logpath=True)
def run_test_script(self) -> None:
"""
测试脚本执行
"""
# 用例执行前的初始化方法
self.start_script()
try:
# 执行测试脚本
self.run_script_content(self.driver)
except Exception as e:
print("脚本执行失败:", e)
raise # 重新抛出异常
finally:
# 生成测试报告
self.generate_report()
# 关闭当前应用
self.close_script()
测试用例脚本改写
测试用例1:module_01:case_point_01
测试用例2:module_01:case_point_02
测试用例3:module_02:case_point_01
测试脚本批量执行
设计批量脚本执行入口文件:case_runner.py
from module_01.case_point_01.case_point_01 import TestCaseScript as Module01CasePoint01
from module_01.case_point_02.case_point_02 import TestCaseScript as Module01CasePoint02
from module_02.case_point_01.case_point_01 import TestCaseScript as Module02CasePoint01
class CaseRunner:
@staticmethod
def run_all_cases():
Module01CasePoint01().run_test_script()
Module01CasePoint02().run_test_script()
Module02CasePoint01().run_test_script()
if __name__ == '__main__':
CaseRunner().run_all_cases()
批量执行效果
总结
通过对测试脚本中的通用方法进行提取并封装到独立的.py 文件中,在进行脚本设计时,一方面能够减少代码量,另一方面还能降低代码维护的成本。
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。