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

2023-10-27

整理了一些软件测试方面的资料、面试资料(接口自动化web自动化、app自动化、性能安全、测试开发等),有需要的小伙伴可以文末加入我的学习交流qun,无套路自行领取~ 

大家好。

从事软件测试很多年了,从各个大厂一路摸爬滚打,现在我有幸供职于字节跳动

。个人也是从功能测试慢慢爬到了自动化测试这条路上。所以针对这个问题,我还有点发言权。

记得我一开始从功能准备转型到自动化测试,和很多“涉事未深”的同学一样,也面临首选语言的选择性障碍。在询问行业大佬到底是选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的技术方案探讨和实践哦~~

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 这些资料,对于从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入下方我们的测试交流群大家一起讨论交流学习。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 和Java 哪个更适合做自动化测试? 的相关文章

  • “揭秘性能测试工具:优化软件性能的关键秘籍“

    性能测试工具的设计宗旨是为了模拟用户对软件应用程序或系统的各种操作 旨在评估关键的性能指标 包括响应时间 吞吐量 并发能力和资源利用率 通过这些工具模拟的多用户环境 我们能够产生与实际工作负载相似的条件 并监测系统在这种情况下的性能表现 一
  • 接口测试之Fiddler弱网测试

    前言 目前市面上的APP功能越来越丰富 移动端测试也越显为重要 因为用户在网速慢的情况下 你的网站 软件 总能出现各种各样的问题 请不要忽略这一点 针对在不同的网络情况下 接下来 本篇要讲述的就是在通过fiddler对APP进行模拟弱网测试
  • Jmeter 压测-性能调优5大注意

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 2k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 外包干了3个月,技术退步明显。。。。。

    先说一下自己的情况 本科生 19年通过校招进入广州某软件公司 干了接近4年的功能测试 今年年初 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了四年的功能测试 已经让我变得不思进取 谈了2年的女朋友
  • 基于信号完整性的PCB设计原则

    最小化单根信号线质量的一些PCB设计建议 1 使用受控阻抗线 2 理想情况下 所有信号都应该使用完整的电源或地平面作为其返回路径 关键信号则使用地平面作为返回路径 3 信号的返回参考面发生变化时 在尽可能接近信号换层孔的位置增加至少一个返回
  • 测试开发必知:有Tomcat,为什么还要Nginx?

    只用Tomcat 不用Nginx搭建Web服务 行不行 我曾经提出的愚蠢问题 今天详细给自己解释下 为什么必须用Nginx 不用Nginx 只用Tomcat的Http请求流程 浏览器处理一个Http请求时 会首先通过DNS服务器找到域名关联
  • 基于电源完整性的PCB设计原则

    基于电源完整性的一些PCB设计建议 1 尽量减少电源和地通路之间的环路电感 在相邻的层上分配电源和接地面时 使用尽可能薄的电介质 2 通过在平面之间使用尽可能高的介电常数来获得平面之间的最低阻抗 与尽可能薄的介电常数设计保持一致 3 使用尽
  • 软件测试|深入了解Python中的super()函数用法

    简介 Python中的super 函数是一种强大的工具 用于在子类中调用父类的方法 它在面向对象编程中非常有用 可以让你轻松地扩展和重用现有的类 本文将详细介绍super 函数的用法 并提供一些示例来帮助你更好地理解它的功能 什么是supe
  • 软件测试|Selenium StaleElementReferenceException 异常分析与解决

    简介 Selenium 是一个流行的自动化测试工具 用于模拟用户与网页交互 然而 当我们在使用 Selenium 时 可能会遇到一个常见的异常 即 StaleElementReferenceException 这个异常通常在我们尝试与网页上
  • 软件测试|sqlalchemy relationship

    简介 SQLAlchemy是一个流行的Python ORM 对象关系映射 库 它允许我们以面向对象的方式管理数据库 在SQLAlchemy中 relationship 是一个重要的功能 用于建立表之间的关系 在本文中 我们将详细探讨 rel
  • 软件测试|Pydantic处理时间类型数据

    简介 我们之前介绍过使用 pydantic 验证数据 比如校验数据的格式等 但是在我们的日常工作中 还有一种数据是需要我们验证的 比如时间数据 时间数据不同于字符串 列表等数据 与他们的验证不一样 本文就来为大家介绍一下 pydantic
  • 软件测试|使用Python读写yaml文件,你会了吗?

    简介 YAML YAML Ain t Markup Language 是一种可读的数据序列化格式 它常用于配置文件和数据交换 Python 提供了许多库来处理 YAML 文件 在本文中 我们将探讨如何使用 PyYAML 库来读取和写入 YA
  • 软件测试|教你如何使用Python绘制出奥运五环旗

    简介 我们之前介绍过使用turtle来绘制正多边形 但是绘制正多边形只是turtle模块最基础的使用 我们可以使用turtle模块绘制出更多不一样的精彩图形 本文就来给大家介绍一个比较简单的turtle绘图实例 绘制奥运五环旗 初始化参数
  • 新手也能看懂的【前端自动化测试入门】!

    前言 最近在网上搜索前端自动化测试相关的文档 但是发现网上的文章都是偏使用 没有把一些基础概念说清楚 导致后续一口气遇到一些 karma Jasmine jest Mocha Chai BDD 等词汇的时候很容易一头雾水 这次一方面整理一下
  • 探索自动化测试断言:提升测试效率与质量的关键!

    前言 断言在自动化测试中起着关键的作用 它是验证测试结果是否符合预期的重要手段 如果在自动化测试过程中忽视了断言 那么这个测试就失去了其本质的意义 因为我们无法得知测试结果是否达到了预期的效果 因此 断言在自动化测试中的重要性不言而喻 那么
  • 驾驭远程工作:提高工作效率与灵活性的秘诀

    随着科技的飞速发展 远程工作已成为越来越多企业和员工的选择 这种工作模式不仅为员工提供了更大的灵活性 也为提高工作效率创造了新的可能 本文将深入探讨如何通过远程工作提高工作效率和灵活性 一 明确目标与计划 在远程工作中 明确的目标和计划至关
  • 图片翻译在线怎么用?分享翻译软件给你

    作为一个不擅长学习语言的人 我真是要被生活中似乎无处不在的英语搞蒙了 想象一下 你正在逛商场 想买一瓶洗护用品 拿起来却看到商品上满是看不懂英文说明 是不是一头雾水 或者 你在浏览社交媒体时 看到一张充满英文的趣味图片 却因为语言障碍而错过
  • 哪里有视频压缩软件免费版在线使用?轻松压缩视频大小

    作为一个文件管理员 我常常需要处理大量的视频文件 有时候 视频文件过大给传输 存储带来了诸多不便 遇到这种情况 很多人就会选择使用视频压缩软件来减小文件大小 不过一些小伙伴不清楚视频压缩软件app 电脑软件 网页有哪些 接下来我们将从功能
  • 外包干了2个月,技术倒退2年。。。

    先说一下自己的情况 本科生 20年通过校招进入深圳某软件公司 干了接近4年的 功能测试 今年国庆 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了四年的功能测试 已经让我变得不思进取 谈了3年的女朋
  • 用Python实现高效数据记录!Web自动化技术助你告别重复劳动!

    自动化关键数据记录 简介 关键数据记录是 Web 自动化测试中的关键部分 它们提供了关于系统行为和执行过程的详细信息 有助于验证用例的正确性 排查问题和确保应用程序的质量 行为日志 行为日志是一种用于记录系统或应用程序的操作和事件的技术 它

随机推荐

  • 一个Java对象占用多大内存?

    一个Java对象占用多大内存 java中对象由对象头 实例数据 填充数据组成 虚拟机要求对象必须是8的倍数 对象头包括 markword和类型指针 以空对象Object为例 内容 32位 64位 markword 4byte 8byte 类
  • Lyapunov稳定性分析3(离散时间系统)

    Lyapunov稳定性分析3 离散时间系统 一 李雅普诺夫稳定性判定 1 1 Lyapunov 两类稳定性方法分析 1 2 总结 二 举例 2 1 MATLAB函数形式 2 2 MATLAB函数实例 三 离散Lyapunov方程的解 注 L
  • 输出漏斗

    本题要求你写个程序把给定的符号打印成沙漏的形状 例如给定17个 要求按下列格式打印
  • 端午节餐厅公众号推文就用来逗微信编辑器

    端午节营销不仅仅是一次营销 更是一次文化之旅 要充分挖掘端午节的文化价值 而不单纯挖掘其假日价值 不能将端午节当做一种简单的延续和继承 而是要通过各种与节日相关的 让顾客朋友积极参与的活动 与消费者之间形成互动 这才是餐厅营销的目的 端午节
  • ERP应收应付进阶操作与子流程--开源软件诞生29

    赤龙ERP应收应付进阶讲解 第29篇 用日志记录 开源软件 的诞生 进入地址 点亮星星 祈盼着一个鼓励 博主开源地址 码云 https gitee com redragon redragon erp GitHub https github
  • 错误 1 error LNK2019: 无法解析的外部符号 __imp__pthread_create,该符号在函数 _main 中被引用 解决方法

    错误 1 error LNK2019 无法解析的外部符号 imp pthread create 该符号在函数 main 中被引用 解决方法 参考文章 1 错误 1 error LNK2019 无法解析的外部符号 imp pthread cr
  • Windows/Linux C/C++任意键继续

    include
  • 数据仓库主题一(宽表模型设计)

    一 典型的数据仓库建模思想一般主流分为两种 第一种 ER模型是数据仓库之父父 Bill lnmon 提出的建模方法是从全企业的高度设计 3NF 模型 用实体关系 Entity Relationship ER 模型描述企业业 务 在范式理论上
  • C++的返回值优化

    引言 最近打算优化新项目的一个函数返回方式 最后发现有一个 C RVO 优化 网上查了查资料 自己学习了 在这里记录一下 1 从函数返回值 为了从一个函数得到运行结果 常规的途径有两个 通过返回值和通过传入函数的引用或指针 当然还可以通过全
  • UGUI文本字体颜色和大小等代码修改

    由于项目需求用UGUI在同个文本中显示出颜色和大小都不同的文字 我上网找个很久并没有见到相关的帖子 经过一番研究和总结最终解决了这个问题 UGUI如何在同一个text将字体改为不通的颜色和大小等 直接上效果图 更多内容请关注微信公众号 un
  • Java 反射的获取设置成员变量

    Java 反射的获取成员变量 文章记录学习过程 只供参考 1 获取成员变量们 Field getFields 获取所有public修饰的成员变量 Field getDeclaredFields 获取所有成员变量 不考虑修饰符 Field s
  • 起于编程,终于打工人

    我是一名来自西安的研0学生 本科是某双非一本 专业是通信工程 本科的我傻傻的只知道学习学习的知识 虽然学习成绩不错在专业前10 但是找工作时却屡屡碰壁 于是考研 现已经上岸某双非一本 导师的研究方向是机器视觉SLAM 跟嵌入式相关 所以我也
  • 自学Python去接单,一周就能赚取近1200块,你看不起的行业,真的很赚钱!

    放下手中的工作 你还有收入吗 除去每月的开销 还能剩多少呢 如果突然被辞退 能应付得来吗 不知道你有没有算过 一个家庭一辈子要花多少钱 1套房加装修至少150万 1个孩子培养到大学毕业至少100万 一家三口每年日常开销平均5万 30年就是1
  • 百度语音sdk集成java,[专栏作家]百度语音识别接入【Eclipse+Unity3D】

    原标题 专栏作家 百度语音识别接入 Eclipse Unity3D 运行效果 背景 现在我们要给我们的游戏接入百度语音SDK 让我们的游戏可以被声控 当我们说 上 游戏就响应上 下 游戏就响应下 左 游戏就响应左 右 游戏就响应右 或者听到
  • Error 42 error C2784:

    Error 42 error C2784 bool std operator lt const std Tree lt Traits gt const std Tree lt Traits gt could not deduce templ
  • bp神经网络时间序列预测,bp神经网络数据预处理

    怎么用已经训练好的BP神经网络进行预测下一个值 谷歌人工智能写作项目 神经网络伪原创 bp神经网络如何用于预测 如何人工神经网络来预测下一个数值 newff函数建立BP神经网络 历史数据作为样本 例如前n个数据作为输入 输入节点为n 当前数
  • C++ 多线程编程

    很有意义的几个博客或问答网址 https www zhihu com search type content q C 2B 2B E5 A4 9A E7 BA BF E7 A8 8B E7 BC 96 E7 A8 8B https www
  • 截获POST或GET请求提交的所有参数

    这里截获POST或GET请求提交的所有请求参数 并组成查询串返回 该方法用于将request中参数取出组成查询串后返回 param request HttpServletRequest return String 返回key1 value1
  • 红队隧道应用篇之NetCat使用(十一)

    简介 NetCat是一个通过TCP UDP在网络中进行读写数据工具 被行内称为 瑞士军刀 主要用于调试领域 传输领域以及黑客攻击领域 利用该工具可以将网络中一端的数据完整的发送至另一台主机终端显示或存储 常见的应用为文件传输 与好友即时通信
  • Python 和Java 哪个更适合做自动化测试?

    整理了一些软件测试方面的资料 面试资料 接口自动化 web自动化 app自动化 性能安全 测试开发等 有需要的小伙伴可以文末加入我的学习交流qun 无套路自行领取 大家好 从事软件测试很多年了 从各个大厂一路摸爬滚打 现在我有幸供职于字节跳