都2023年了,Python 和Java 哪个更适合做自动化测试?

news2024/11/16 5:23:35

大家好。从事软件测试很多年了,从各个大厂一路摸爬滚打,现在我有幸供职于字节跳动。个人也是从功能测试慢慢爬到了自动化测试这条路上。所以针对这个问题,我还有点发言权。

记得我一开始从功能准备转型到自动化测试,和很多“涉事未深”的同学一样,也面临首选语言的选择性障碍。在询问行业大佬到底是选Python还是Java时,基本能得到的答案无外乎:“你想干啥”,“你会啥”,“你想怎么做” 。

后来自以为想清楚了这三个问题,大佬们却像范大将军似的一顿训:“哎,谢天谢地,实用主义点,我劝你们,先弄明白自己的本职工作,把自动化的这个理念先搞懂。你测试基础不牢固,技术栈又不熟,一说全会,一做全废。连普通功能点都评估不好,到时候你问我要怎么写?”

带着这些问题,我以懵懂的心,才由深入浅的把这个“首选语言”搞明白。

软件产品自动化测试流程图

要想说透冰山上“自动化首选语言”这个表层问题,其实我们应该钻到冰山下,去了解另外两个问题:1、测试为什么要使用自动化,2、目前企业主流上是使用什么方法来实现自动化。了解了冰山下的2个问题,再来聊冰山上的问题,就能由深入浅知道答案了..

所以分享内容会稍长,我接下来的文章主题结构,就围绕这3个问题展开:

1)为什么要使用自动化测试?
2)目前企业主流上是使用什么方法来实现自动化测试
3)Python 和Java 哪个更适合做自动化测试?

好,文章正式开始....


一、软件测试为什么要使用自动化?

在回答这个问题之前,我们要先把自动化的理念搞清楚!

1、什么是自动化测试?

所谓自动化测试,指的是使用独立于待测软件的其他软件,来自动执行测试、比较实际结果与预期并生成测试报告这一过程。

在测试流程已经确定后, 测试自动化可以自动执行的一些重复但必要测试工作。也可以完成手动测试几乎不可能完成的测试。对于持续交付和持续集成的开发方式而言, 测试自动化是至关重要的

2、为什么测试工作要使用自动化?

自动化测试的工作原理其实本身粗略的讲就是代替手工测试,但究竟代替的是什么?

我们以传统手工测试举例,我们写一条case有前置,有步骤,有预期结果,然后人工操作,将实际结果同预期结果比对。

而自动化则是由计算机来代替我们将自动比对预期结果和实际结果的过程。

我们拿计算器举例子:

[暂不支持下载该格式的图片]

我们去计算加法,1+1=2

手工:a输入1 b输入1 预期结果为2 执行后 2=2 测试通过

程序:a=1 b=1 判断:2==a+b 执行后 2=2 测试通过

恭喜你!现在你拥有一个仅仅能计算1+1=2正确的计算器!但凡换一种你都不能保证它对!

于是有一天机缘巧合的把a=1改成a=2 这个时候执行结果 判断: 2==a+b 执行后 2==3 测试不通过

于是我们引入了参数化的概念。

a,b,c 加法时对应 第一组:1,1,2 现在 a=1 b=1 c=2 判断:c==a+b 执行后 2=2 测试通过

这个时候我们通过手工测试的基础,我们考虑我们的测试点,从传统手工测试角度出发,我们通过等价类划分,将数字分为,整形,浮点型,0。再根据边界值划分为比如最长就到3位也就是结果=999

这样来我们将更改我们的测试参数

第2组1.1 ,1.2 ,2.3 将参数 带入a+b=c中 执行 c==a+b c==2.3 执行后2.3==2.3 测试通过

第3组1,0,1 将参数 带入a+b=c中 执行 c==a+b c==1 执行后1==1 测试通过

第4组100,200,300 将参数 带入a+b=c中 执行 c==a+b c==300 执行后300==300 测试通过

上面都是正常的场景,现在来一些异常的场景,在原有的基础上进行划分

细化分第2组数据让两个浮点数相加往前进一位 1.89,1.33,3.22 将参数 带入a+b=c中 执行 c==a+b c==3.22 执行后3.3.2199999999999998==3.22 测试不通过 这个时候就造成了精度问题可以让研发进行修复,如保留2位小数。

当然我么还可以细化分第4组数据让它超出边界值999,1,超出边界,结合第2组细分和第4组细分既是浮点型,又让它结果超出边界 555.55,444.55,超出边界 等加减乘除的运算都验证一遍,通过参数输入,计算机输出,结果比对。从而得到一个加法的自动化用例集,在此基础上我们还可以有其他运算的用例集。

以上这就是最原始的一种测试方式。无论你是测试接口还是Web端,移动端,UI,归根结底,请求方后,返回值同预期值做比较。所以每种语言几乎都可以进行自动化测试。

既然每种语言几乎都可以进行自动化测试,Python 和Java 哪个更适合做自动化测试?

我们以程序员第一句话 Hello World!为例:

1. 这是java的HelloWorld:

public class HelloWorld {
 public static void main(String args[]) {
 System.out.println("Hello World!");
 }
}

2. 这是python的HelloWorld

print("HelloWorld!")

python 语言比较简洁,开发起来比较快。 java 语言也很简洁,但相对 python 而言比较复杂。很明显python的简洁不是浪得虚名。

二、目前企业主流上是使用什么方法来实现自动化测试

随着业务不断的积累,case逐渐增加,人员不断调整,我们无法草率的删除过往的case。

但也做不到上线一个够简单,够独立的功能,但每次执行自动化会回归全部case的痛点。

于是千呼万唤始出来了测试框架。

测试框架使得自动化测试,更便于实施处理自动化测试脚本,本身的存在的问题:如异常处理和场景恢复,弥补测试脚本本身的不足或是特殊测试需求,测试易于维护。

自动化测试框架的接口模型图

1、Java常听说的测试框架

1 ) JUnit

Junit可以让您为Java代码编写出相应的单元测试程序。您可以将JUnit用于单元与集成测试,它还能够支持Java 8的各种功能。

2 ) REST Assured

在Java中测试和验证各种REST服务,Java领域带来了语言上的简便性。它是一种十分优秀的REST API集成测试工具。

3 ) Selenium

Selenium应该是Java UI测试中最为普遍的工具了,它允许您测试JSP页面,甚至允许您去编写Web应用,以验收各种测试。

4 ) TestNG

TestNG是一种由JUnit和NUnit发展而来的测试框架,不过它引入了许多新的功能,如:annotations可以在任意大的线程池中,运行各种可用策略的测试,可以弥补JUnit和TestNG之间的差距。

2、python常见的测试框架:

1)Unittest

unittest 的一个很有用的特性是 setUp() 和 tearDown() 方法,它们提供了为测试进行准备和扫尾工作的功能,这种功能很适合用在测试对象需要复杂执行环境的情况下。当类里面定义了 setUp() 方法的时候,测试程序会在执行每条测试项前先调用此方法;同样地,在全部测试项执行完毕后,tearDown() 方法也会被调用。

2) Pytest

目前行业内常用的就是Pytest,Pytest简单灵活,容易上手,支持参数化。
能够支持简单的单元测试和复杂的功能测试,还可以用来做Selenium/Appnium等自动化测试、接口自动化测试(Pytest+Requests),Pytest具有很多第三方插件,并且可以自定义扩展。

3、企业是怎么选择的呢?

我不说也许你不知道,其实。。。。使用JavaScript或者jQuery也可以写一些简单的自动化脚本~

但很多大厂都是Java开发的,对于自动化测试开发工具多数也会使用Java语言,这样更容易沟通,思想兼容。同时面向移动端自动化对掌握Java语言工具的测试工程师来讲,Java也非常对口!

当然很多大厂包括一些中小型企业,创业团队也会使用Python进行测试。
用Python+Pytest自动化测试;
用Python+Selenium:搞定UI自动化测试,兼容性测试;
用Python Request:搞定接口测试;
用Python Locust,搞定性能测试;
用Python Scapy:搞定安全性能测试;
通过Python+mysql+Django/Flask搭建公司自己使用的自动化测试平台。

对于移动端我所在的公司字节跳动为例,我们会使用自研Shoots方案来做全平台自动化测试,也会通过Airtest做移动端跨平台的UI自动化测试框架(适用于游戏和App)而这些都是基于Python语言开发的。
在数据驱动测试的情况下,在一些临时项目,或者短期任务中,我们也常用Python这种胶水语言去写一些脚本,生成测试数据,辅助测试任务,降低人力成本。

三、Python 和Java 哪个更适合做自动化测试?

1、先来说说Python

Python没有很复杂的结构,前期准备也少,对人员的专项素质要求并不高,对电脑配置也没有很高的要求,对于未经过计算机专业培训的同学来说入门唾手可及。

尤其是Pytest框架,它的扩展也比较好:
如Pytest-selenium(集成selenium)、
Pytest-html(完美html测试报告生成)、
Pytest-rerunfailures(失败case重复执行)、
Pytest-xdist(多CPU分发)等测试用例的skip和xfail处理,可以很好和jenkins集成,
当然report框架----allure 也支持了Pytest。
最终你将会获得一份测试报告如Jenkins展示图:

总结:对测试工程师而言,Python 简单易学,庞大的充沛的生态,对现有的自动化测试框架相对完善且好用(比如 selenium,appium 等等),测试可以在框架上简易地开发,可以定制化测试环境。

2、再来说说JAVA

Java 虽然也能做自动化测试,但相对 Python 而言并不是那么好学。但如果测试工程师想在框架上进行简易的开发,做测试开发工作,那就必须掌握 Java 语言,需要学习更多的东西。

3、分享下我的真诚建议

Python和Java说到底是一种开发工具,一种语言,他们思想是互通的。

我们追求的本质是提高测试效率,提高测试质量,降低测试成本,降低维护成本。

语言本身无好坏。如何挑选?

要去挑你熟悉的或者周边儿大家都在用的,这样资源更具有优势。因为资源越丰富学习起来的成本越低,毕竟我们不是在一个封闭的环境闷声学技术。

可以从Python入门,等有些基础以后也可以选择,再往Java上面去靠,学习更多的计算机原理。

有基础的好上手,没基础的好入门,就目前Python对于测试来讲足够了。


四、写在最后

注重学习思路,测试基础的沉淀,测试策略及测试思路的培养对自动化测试更是事半功倍。等工作的时候基本都封装了一套自己的测试架构,大家更在乎的是使用xxxx的技术方案探讨和实践哦~~


最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

资料获取方式 :

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/605410.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt QPushButton背景图片

一、问题 使用控件显示图片缩略图,当点击控件时,弹出窗口显示完整的图片 二、分析 应该用按钮控件,用信号槽连接。按钮控件是有参数icon,但是只能显示控件中,不能覆盖在整个控件上。 三、方法一:使用st…

线段树算法(C++/C)

目录​​​​​​​ 一、线段树算法的概念 二、为什么需要线段树 三、线段树算法的实现 (1)建树 (2)查询 (3)修改 (4)综合代码,求区间和 (5&#xff…

从“互联网+”到“互联网医疗+”,免费互联网医院开创新格局

随着互联网的发展,各行各业都在积极探索“互联网”时代下的创新模式。其中,医疗领域也开始了自己的变革之路,从传统的医疗模式转向了“互联网医疗”的新型格局。免费互联网医院的出现,则更是为这一变革注入了新的活力。 所谓“互联…

【嵌入式系统应用开发】FPGA——基于HC-SR04超声波测距

文章目录 前言环境目标结果 1 实验原理1.1 超声波原理1.2 硬件模块时序图1.3 模块说明 2 设计文件2.1 时钟分频2.2 超声波测距2.3 超声波驱动 3 实验验证3.1 编译3.3 硬件测试 总结 前言 环境 硬件 DE2-115 HC-SR04超声波传感器软件 Quartus 18.1 目标结果 使用DE2-115开发…

【Linux驱动】认识驱动(驱动的概念、驱动分类)

目录 1、什么是驱动? 2、应用程序调用驱动基本流程 3、file_operations 结构体 4、驱动的分类 1、什么是驱动? 驱动就是一段程序,能够获取外设或者传感器数据、控制外设。驱动获取到的数据会提交给应用程序。 在 Linux 中一切皆为文件&…

【实用篇】Elasticsearch02

文章目录 分布式搜索引擎021.DSL查询文档1.1.DSL查询分类1.2.全文检索查询1.2.1.使用场景1.2.2.基本语法1.2.3.示例1.2.4.总结 1.3.精准查询1.3.1.term查询1.3.2.range查询1.3.3.总结 1.4.地理坐标查询1.4.1.矩形范围查询1.4.2.附近查询 1.5.复合查询1.5.1.相关性算分1.5.2.算分…

Linux开机rc.local不自启动执行脚本问题的排查思路及问题解决

Linux开机rc.local不自启动执行脚本问题的排查思路及问题解决 问题 Linux系统中,在rc.local里面配置的启动命令等不能能够在开机的时候进行自启动 问题解决 解决问题排查中最大的麻烦,需要进行reboot重启 查看rc-local的运行状态 systemctl status r…

clickhouse简介与实战

文章目录 1:简介1.1:CH是什么?1.2:CH优缺点1.2.1:优势1.2.2:缺点 1.3:架构设计 2:CH接口3:CH引擎1:数据库引擎3.1.1:mysql引擎 2:表引擎3.2.1&…

路径规划算法:基于模拟退火优化的路径规划算法- 附代码

路径规划算法:基于模拟退火优化的路径规划算法- 附代码 文章目录 路径规划算法:基于模拟退火优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化…

基于flask的web应用开发——访问漂亮的html页面以及页面跳转

目录 0. 前言1. html基本知识2. 编写html文本3. 在Flask中设置访问html4. 实现点击跳转 0. 前言 本节学习如何在flask应用程序下让用户访问你提前制作好的html页面 操作系统:Windows10 专业版 开发环境:Pycahrm Comunity 2022.3 Python解释器版本&am…

(学习日记)2023.04.27

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

防火墙之IPSec VPN实验

防火墙IPSec VPN实验 原理概述: 指采用IPSec协议来实现远程接入的一种VPN技术,IPSec全称为Internet Protocol Security,是由Internet Engineering Task Force (IETF) 定义的安全标准框架,在公网上为两个私有网络提供安全通信通道,通过加密通道…

【数据结构】单调栈

目录 1.概述2.代码框架2.1.单调递增栈2.2.单调递减栈 3.应用3.1.应用一3.2.应用二 1.概述 (1)单调栈是一种特殊的栈,它在普通栈的基础上要求从栈顶到栈底的元素是单调的,如果栈中的元素从栈顶到栈底是单调递增的,那么…

Linux CGroup 原理

Linux CGroup 原理 1、CGroup简介 cgroups是Linux下控制一个(或一组)进程的资源限制机制,全称是control groups,可以对cpu、内存等资源做精细化控制。 开发者可以直接基于cgroups来进行进程资源控制,比如8核的机器上…

JAVA用tess4j识别复杂的验证码,自定义字库,计算题验证码,jTessBoxEditor,tess4j,验证码识别

JAVA用tess4j识别复杂的验证码,自定义字库,计算题验证码 场景JAVA用tess4j识别文本MAVEN依赖traineddata文件下载识别英文识别中文 JAVA用tess4j识别验证码常见验证码的类型识别 自定义字库,提高识别率下载jTessBoxEditor解压运行准备素材合并…

微信小程序入门笔记

常用技术:开源库 图表:wxcharts-min.js 网络通信:类似 ajax ui: WeUi JSON 配置文件 小程序中,包含唯一的全局配置文件 app.json,以及每个页面的配置文件 page.json。每单页页面相应的 JSON 文件会覆盖与 app.json相同…

门控时钟检查(clock gating check)的理解和设计应用(上)

在笔者的一篇老文Clock Gating之浅见 中,一起探讨过工具处理门控时钟的方法和门控时钟所带来的相关收益和面积代价。除此之外,门控时钟的检查(clock-gating check)在STA中也有相应的处理方式,通过这篇文章,…

4年测试经验,一问三不知,过于离谱...

公司今年要招人,面倒是面了很多测试,但没有一个合适的。一开始想要的就是中级的水准,也没指望来大牛,当然来了更好,提供的薪资在10-20k,来面试的人有很多,但平均水准真的是让人失望。 看简历时很多都写着3…

【瑞萨MCU】玩转 HMI-Board 之 MDK + RASC 点灯

此前我们已经配置好了 瑞萨 MCU MDK RASC 的开发环境,接下来进入到瑞萨 MCU 的 HelloWorld 环节,使用 MDK 点亮两个 LED 灯。 这次我们使用的是瑞萨和 RT-Thread 联合推出的 HMI-Board 开发板。 HMI-Board 开发板简介 HMI-Board 为 RT-Thread 联合瑞…

3.6 多边形游戏

博主简介:一个爱打游戏的计算机专业学生博主主页: 夏驰和徐策所属专栏:算法设计与分析 1.什么是多边形游戏? 对于多边形游戏,一种特定类型的玩法,即在给定的简单多边形上进行移动、删除顶点或边&#xff…