自动化调研

category
自动化
date
May 6, 2026
icon
password
slug
diaoyan
status
Published
summary
自动化调研
tags
工作学习
type
Post

一、基础知识

1、Python 语言介绍

Python 是一种高级、解释型、通用的编程语言,由Guido van Rossum于1989年发明,以简洁易读著称。
核心特点:
  • 语法简洁:使用缩进表示代码块,代码量少,适合自动化小白
  • 解释执行:无需编译,逐行运行,便于快速调试
  • 动态类型:变量无需声明类型,如 a = 10 后可直接 a = "hello"
  • 丰富的生态:超过20万个第三方库可任意调用
  • 跨平台:Windows、Linux、macOS均可运行
自动化测试使用Python 的优势:
  • 入门快:测试人员无需深厚编程背景即可上手
  • 测试框架成熟:unittest、pytest、Robot Framework等
  • 驱动工具支持:Selenium(Web)、Appium(移动端)、Requests(接口)
  • 高效编写:用Python 写的测试脚本长度往往是Java的1/3
Python 在自动化测试中的短板与局限性:
  • 执行效率较低:用例过多时执行效率低,运行时间上和java有较大差距
  • 移动端支持弱:对于底层由java实现的Appium,使用Python可能会出现超时、驱动不稳定问题
  • 工程化能力较弱:大型测试框架的工程化能力弱于 Java,Java 的 Spring Boot + TestNG 能构建非常规范的大型测试平台,Python 较少用于此

2、Java 语言介绍

Java 是一种 高级、编译型、面向对象 的编程语言,由 Sun Microsystems 公司于1995年发布,以 "一次编写,到处运行" 的跨平台能力著称。

核心特点:

  • 语法严谨:强类型检查,变量必须声明类型,如 int a = 10; 不能后续赋值为字符串
  • 编译执行:源代码编译为字节码,在 JVM(Java虚拟机)上运行,执行效率高
  • 面向对象:强制使用类和对象,代码结构清晰,利于大型项目维护
  • 丰富的生态:全球最大的开源社区之一,Maven/Gradle 构建工具成熟
  • 跨平台:JVM 支持 Windows、Linux、macOS 等主流操作系统

自动化测试使用 Java 的优势:

  • 执行效率高:编译型语言 + JIT(即时编译)技术,运行速度是 Python 的 3-5 倍,适合大规模回归测试
  • 强类型检查:编译期发现类型错误,避免运行时崩溃,大型脚本维护更可靠
  • 移动端支持成熟:Appium、Android UI Automator 等底层由 Java 实现,兼容性和稳定性更好
  • 工程化能力强:Maven/Gradle 统一管理依赖,TestNG/JUnit 与 CI/CD 无缝集成
  • 企业级生态完善:Spring Boot 可快速构建测试平台,Allure、ExtentReport 等报告工具支持完善

Java 在自动化测试中的短板与局限性:

  • 学习门槛较高:面向对象概念(继承、多态、泛型)、JVM 原理等需要系统学习,上手周期长
  • 代码量较大:相同功能的测试脚本,Java 代码量通常是 Python 的 2-3 倍
  • 语法不够灵活:需要显式处理异常、定义 getter/setter、编写类型转换等样板代码
  • 快速验证能力弱:不支持交互式命令行(REPL),调试小段代码需完整编写 main 方法或借助 IDE
  • 启动开销较大:JVM 启动和类加载需要一定时间,对于少量用例的快速反馈场景不如 Python 敏捷

3、总结

项目轻量化、小型灵活的回归测试优先 Python;企业级大规模自动化、移动端测试、性能敏感场景优先 Java。

二、自动化框架介绍

1、Python生态

1.1 Pytest — 接口自动化

用途:通用主流的测试框架,适合接口自动化、单元测试
特点或能力
  • 组织用例方便:简单灵活,能轻松组织自动化测试用例
  • 测试范围广:既能做简单的单元测试,也能做复杂的功能测试
  • 扩展性强:拥有大量第三方插件,且支持自定义扩展
  • 用例状态处理:支持跳过(skip)和失败(fail)测试用例的处理

1.2 Selenium — Web Ui自动化

用途:针对浏览器自动化测试工具
特点或能力
  • 模拟用户:能模拟真实用户操作,包括点击、输入、选择下拉框、鼠标移动、滚动页面等
  • 提供多种定位方式:可通过id、name、class、CSS选择器、XPath等8种方式定位页面元素
  • 多语言支持:可用Python、Java、C#、JavaScript、Ruby等多种编程语言编写脚本
  • 等待机制:显式等待(WebDriverWait)、隐式等待

1.3 pyautogui、pynput — 系统层键鼠控制

用途:用来控制系统层面的键鼠操作
特点或能力
  • PyAutoGui操作模拟:可实现坐标判断、控制键鼠、故障保险时间、以及截图等多种功能
  • pynput事件监听:调用pynput库可以监听鼠标、键盘的输入事件
相关知识文档:键鼠控制 | 星期八营业

1.4 Appium — 移动端自动化

用途:跨平台移动端测试框架,可适用于Android、IOS
特点或能力
  • 语法简单:基于 WebDriver 协议,语法与 Selenium 高度相似
  • 扩展性强:可适配真机,也可适配模拟器实现手势操作等

2、Java生态

2.1 TestNG — 接口/单元测试框架

用途:企业级单元测试和接口自动化测试框架,功能全面
特点或能力
  • 注解丰富:提供 @Test@BeforeMethod@DataProvider 等注解,组织用例清晰
  • 数据驱动:通过 @DataProvider 实现数据与用例分离,支持从Excel/XML读取数据
  • 依赖管理:支持用例间的依赖关系设置(dependsOnMethods),控制执行顺序
  • 报告完善:自动生成HTML测试报告,可与Allure、ExtentReport集成
相关知识文档TestNG官方文档

2.2 Selenium — Web UI自动化

用途:浏览器自动化测试工具(Java版本)
特点或能力
  • 语法一致:与Python版Selenium API高度一致,降低切换成本
  • 页面对象模式:Java的强类型系统非常适合封装Page Object Model
  • 执行效率高:Java编译型语言特性,大规模UI用例运行速度明显快于Python
  • WebDriverManager:自动管理浏览器驱动版本,无需手动下载配置
  • 稳定性更好:企业级长期运行场景下,Java版本的内存管理更成熟
相关知识文档Selenium Java官方文档

2.3 Appium — 移动端自动化

用途:跨平台移动端测试框架,支持Android/iOS(Java版本)
特点或能力
  • 底层同源:Appium服务端由Java实现,Java客户端兼容性和稳定性最佳
  • 驱动管理:支持AndroidDriver、IOSDriver,与Android SDK/iOS工具链集成成熟
  • 手势操作TouchActionMultiTouchAction 等API完善,模拟双指缩放等复杂手势
  • 混合应用支持:WebView切换、上下文管理比Python版更稳定
  • 企业级案例多:大型App自动化项目首选Java版本,社区问题解答更丰富
相关知识文档Appium Java Client

三、自动化测试基础案例

基于智能译制系统自动化测试的可行性分析,现已做两项基础测试

3.1 登录测试

3.1.1 测试内容:模拟用户输入用户名密码,点击登录,并判断是否登录成功
3.1.2 文件用途讲解
notion image
  • .venv是python的虚拟环境,当然如果不是大数据方向的可以不用管,直接用本地的解释器就好了
  • allure-results 是用来存储测试用例的执行日志的,在之后可以直接生成测试报告,条件是要在测试用例中标注
  • file 是放配置文件的文件夹,现在主要考虑的是一些动态的数据用ini文件管理起来,比如元素的XPATH,token
  • conftest.py 文件是运行前会执行的前置代码,比如数据库连接、浏览器driver等等
  • 本次测试要讲解的文件是框起来的这两个
3.1.3 conftest解析
  • 首先是设置一些配置项,这一个文件会先于所有文件执行。注意:这是一个固定的文件,用pytest运行时会先读取这一个文件,因此文件名不可被改变
  • 需要注意给一个隐式等待时间,来让页面完成加载,之后的元素判断中则使用显示等待(可以理解为,如果我需要流程往下走,那就需要隐式等待来让页面完全加载;如果我只想获取后一个元素的值,那就用显示等待,只获取这一个值即可;如果是需要手动操作,则使用强制等待)
  • 使用yield可以和return一样返回数据(这里返回的是一个浏览器操作对象),但是不会终止任务,等用例执行完毕之后就会关闭链接
  • 不同配置参数的效果差异
    • notion image
3.1.4 login_page解析
  • 需要现在页面上找到元素的xpath,可以用开发者工具复制
  • 这里的函数主要是描述步骤,比如输入、点击、拖动等,这里的验证码最好是手动拖动,因为有好几种验证码,用代码实现收益不高
  • 最后判断是否成功登录用的是系统右上角显示的第一个字
3.1.5 test_login解析
  • 这里就是测试用例了,用例规范是:文件和函数都要以test开头
  • 每一个函数是一条测试用例,测试用例的的定义是执行步骤或者是数据校验
  • 这里的装饰器allure就是执行日志了,运行时会写入json文件并保存到指定文件夹中
  • assert断言的作用是判断这一条用例是否通过,语法是:assert 条件, "失败时显示的提示信息"
  • driver来源于conftest中yield返回的实例化对象
3.1.6 执行

3.2 接口测试

3.2.1 测试内容:登录译制系统后,检查首页的进行中、待处理、已逾期的任务数是否正确
3.2.2 文件用途讲解
主要用到框起来的这三个文件
notion image
3.2.3 config.ini讲解
  • 这里是直接手动获取的token数据,必须要的有四个字段:Authorization、Orgcode、Userid、Usersingledevice
3.2.4 index_page讲解
  • 这个文件就是做请求和数据处理的,全部放在测试用例里的话也可以 只是会显得比较长;看个人习惯
  • 关键点是在设置请求头这里带入token数据就可以跳过登录直接请求接口
3.2.5 test_index解析
  • url也可以用配置文件管理起来,这样方便后期管理,这里制作测试演示
  • 在这里调用请求,获取到的数据与数据库中的数据进行比较
  • 如果要链接数据库,流程是在conftest中配置数据库连接并yield一个实例化对象到test_index中,就可以查询了
3.2.6 执行

四、相关技术方案

4.1

上一篇
双系统安装与卸载
下一篇
excel单元格颜色
Loading...