当前位置: 首页 > news >正文

做自动化测试选择Python还是Java?

今天,我们来聊一聊测试人员想要进阶,想要做自动化测试,甚至测试开发,如何选择编程语言

前言

自动化测试,这几年行业内的热词,也是测试人员进阶的必备技能,更是软件测试未来发展的趋势。特别是在敏捷开发模式下,产品迭代速度快,市场不断调整,客户需求不断变化,单纯的手工测试越来越无法适应整个过程。测试人员如何快速响应并保证产品在上线后的质量能够满足客户要求,如何在上线一个新功能的同时快速对旧功能进行回归,保证旧功能不被新功能影响而出现严重的Bug。针对以上问题,采用自动化测试无疑是一个不错的选择,能够做到在保证产品质量的同时提升测试效率。

那么,学习一门编程语言必不可少,同时,学习一门编程语言也是你成为自动化测试工程师乃至测试开发工程师的基本准入门槛。目前,市面上的编程语言五花八门,比如:很多人大学时学过的面向过程C语言,C语言的扩展升级C++,面向对象语言Java或者Python,.NET开发和游戏开发常用的C#语言,当时号称世界上最好的语言PHP,更为方便的脚本语言Shell,以及近些年很火的Golang语言等。基本上能叫上名字的语言都能做自动化。

Java VS Python

对于测试行业来说,绝大多数从业者都会选择两门语言来学习,就是Java和Python。企业里面做自动化测试大多数也是选择这两门语言,并且很多培训班也会选择这两门语言作为主语言进行教学,比如各种Python/Java全栈自动化测试,因此网上的学习资源也是比较多的,方便我们自学。

那么,自动化语言选择Java还是Python呢?

首先,语言本身无优劣,只不过是一种工具手段而已,无论是Java还是Python都能做自动化测试,没有最好的语言,只有最合适的语言,不能简单的说哪门语言好哪门语言不行,而要基于实际应用场景进行分析。

测试行业学习编程语言的用途主要是用来做自动化测试,比如Python技术栈会使用Requests、Unittest/Pytest等框架结合公司业务实现一套覆盖公司系统绝大部分接口的自动化测试框架,然后做持续集成,例如将代码部署到Jenkins,每天定时执行,并将测试报告发送到邮箱,以及上线前的回归测试等。这样做的目的主要是用来监控哪些接口服务或者环境挂了,以及版本迭代过程中上了新功能、修改了代码可能影响关联到其他接口导致异常发生,所以上线前要把系统或者模块的接口自动跑一遍,以便于测试人员第一时间发现问题,并交给开发人员进行修复解决,减少线上Bug率。

学习编程语言还可以编写一些测试工具来提高整个测试团队的工作效率。比如造大量的测试数据,就可以写个循环自动执行。毕竟提高效率也是我们的工作职责之一。

如果你是刚入行软件测试并且之前没有编程经验,那么毫无疑问就选择Python,因为它上手特别快,整个功能也是非常强大的,通过简单代码就能实现很多实用的功能,有强大的标准库以及非常丰富的第三方库,能够辅助你去做UI、接口等自动化测试。不建议新人同时学习两门语言,这样会导致每个都是浅尝辄止,反而不利于深入学习。其次,编程思维和解决问题的思路都是相通的,当你熟悉掌握一门语言时,也能快速掌握另一门语言。

对于有编程基础的同学,可以选择Java进行学习。Java语言难度系数较高,更有挑战性;Java在企业的应用比较广泛,处于龙头老大的地位,适合中大型项目,性能较好,执行速度较快,适合高并发场景;很多服务端开发人员都使用Java,如果你也使用Java,大家就是同一类人,有更多的共同语言,可以很好地和开发进行无缝衔接,便于交流,减少沟通成本。甚至可以拿开发代码进行学习,参与CodeReview,进一步加深对业务的理解,也有利于之后测试过程中进行问题的定位,以及从代码逻辑的角度发现更多的缺陷。

除此之外,根据公司使用的自动化语言进行学习,比如之前已经有自动化用的Python,且组内大部分人技术栈都是Python,这时你就可以选择Python,学完可以马上应用到实际项目中,增加实战经验,遇到自己解决不了的问题也能够一起讨论交流。

Java和Python自动化测试技术栈对比:

PythonJava
接口自动化测试Python+Requests+Unittest/Pytest+HTMLTestRunner/AllureJava+HttpClient/OKHttp+TestNG
Web自动化测试Python+Selenium++Unittest/Pytest+HTMLTestRunner/AllureJava+Selenium+TestNG
App自动化测试Python+Appium++Unittest/Pytest+HTMLTestRunner/AllureJava+Appium+TestNG
测试平台Python+Django/FlaskJava+SpringBoot+MyBatis

总结

两门语言,不管是Java还是Python,都能做自动化测试,如果非要从中选择一种,我更倾向于Python,也推荐初学者从Python入手,主要有两点原因:第一,自动化测试的目的是为了提升测试效率,将更多重复繁琐的工作交给程序自动执行,我们就有更多的时间去测试那些新功能,毕竟手工测试是发现Bug最快和最多的一种途径,自动化的本质还是测试,Python语法相比于Java来说更加简洁,可能Java要写十行,Python只需要两行,如果选择Java可能就需要花更多的时间去编写自动化脚本,而Python所花费的时间会少一些,正如Python的格言所说“Life is short,use python!”人生苦短,我用Python;第二,自动化测试脚本或测试平台一般是内部使用,使用的人数一般比较少,不会涉及高并发这种场景,即使Python性能较差,也不耽误我们做自动化测试。

当然了,同时掌握两门语言再好不过了,正所谓“兵来将挡,水来土掩”,两者都会,无论企业中选择哪门语言做自动化,你都可以快速上手,也是自身能力的体现。

最后,说这么多,最重要的是要行动起来,多写多练,日积月累,自然会如鱼得水,真正把自动化测试在企业中落地,带来对应的效率和质量保障方面的提升。

 

资源分享

下面这份资源,对于想学习【软件测试】的朋友来说应该是最全面最完整的备战仓库,希望也能帮助到你!

 

 

相关文章:

做自动化测试选择Python还是Java?

今天,我们来聊一聊测试人员想要进阶,想要做自动化测试,甚至测试开发,如何选择编程语言 前言 自动化测试,这几年行业内的热词,也是测试人员进阶的必备技能,更是软件测试未来发展的趋势。特别是…...

C#基础之基础语法(一)

总目录 文章目录总目录前言一、C#简述1 C#是什么?2 .Net平台3. C# 和.Net的关系4. 集成开发环境(IDE)二、控制台应用程序1. 常用代码2.注意事项三、基础语法1.编写C#代码注意事项2.C#注释2. 变量&标识符&关键字4. 变量,字…...

【JVM篇1】认识JVM,内存区域划分,类加载机制

目录 一、JVM内存区域划分 ①程序计数器(每个线程都有一个) ②栈:保存了局部变量和方法调用的信息(每一个线程都有一个栈) 如果不停地调用方法却没有返回值,会产生什么结果 ③堆(每一个进程都有一个堆,线程共享一个堆) 如何区分一个变量是…...

CHAPTER 5 文件共享 - FTP

文件共享 - FTP1 FTP1.1 传输方式1. ASCII传输方式2. 二进制传输模式3. 两种传输方式的区别1.2 支持的模式1. 主动模式(PORT)2. 被动模式(PASV)3. 如何选择4. 为什么绝大部分互联网应用都是被动模式?1.3 搭建FTP服务器(使用vsftpd)1. 安装软件…...

【MySQL】将 CSV文件快速导入 MySQL 中

【MySQL】将 CSV文件快速导入 MySQL 中方法一:使用navicat等软件的导入向导如果出现中文乱码方法二:命令行导入(LOAD DATA INFILE SQL)一般来说,将csv文件导入mysql数据库有两种办法: 使用 navicat、workbe…...

Ngnix安装教程(2023.3.8)

Nginx安装教程(2023.3.8)引言1、Nginx简介2、Nginx安装2.1 下载Nginx安装包2.2 免安装启动Nginx(切记解压后将nginx-1.23.3文件夹需要放在英文路径下,实测中文路径不识别且启动不成功)2.3 熟悉Nginx文件夹目录结构2.4 …...

【C语言】每日刷题 —— 牛客(2)

前言 大家好,继续更新专栏c_牛客,不出意外的话每天更新十道题,难度也是从易到难,自己复习的同时也希望能帮助到大家,题目答案会根据我所学到的知识提供最优解。 🏡个人主页:悲伤的猪大肠9的博客…...

关于算法的一些简单了解

文章目录ALGORITHMBASIC INFORMATIONBasic algorithm design technology穷举法分治法减治法动态规划法贪心法Algorithm design technology based on search回溯法分支限界法PRACTICECONCEPTCALATION*CODEprim&dijkstra&kruskal分治法Q&AT(n)T(n)T(n) 是渐进时间复杂…...

mysql无法启动服务及其他问题总结

文章目录1.安装后关于配置的问题显示【发生系统错误,拒绝访问】命令行Command Line Client闪退2.显示【MySQL服务无法启动】问题检查端口被占用删除data文件并初始化配置my.ini/.conf文件重新安装MySQL1.安装后关于配置的问题 显示【发生系统错误,拒绝访…...

数据库表字段命名规范

因为近期笔者在数据库命名规范上产生了一些疑问,故特此记录下来了一些开发规范,望做参考。 摘要: 当前研发工作中经常出现因数据库表、数据库表字段格式不规则而影响开发进度的问题,在后续开发使用原来数据库表时,也会…...

23种设计模式-命令模式(android应用场景介绍)

命令模式是一种行为设计模式,它允许将请求封装成一个独立的对象,并将请求的不同参数化。通过这种方式,命令模式可以在不同的请求间切换,或者将请求放入队列中等待执行。 在Java中,命令模式通常由一个抽象命令类和具体…...

vector你得知道的知识

vector的基本使用和模拟实现 一、std::vector基本介绍 1.1 常用接口说明 std::vector是STL中的一个动态数组容器,它可以自动调整大小,支持在数组末尾快速添加和删除元素,还支持随机访问元素。 以下是std::vector常用的接口及其说明&#xf…...

【C++进阶】四、AVL树(二)

目录 前言 一、AVL树的概念 二、AVL树节点的定义 三、AVL树的插入 四、AVL树的旋转 4.1 左单旋 4.2 右单旋 4.3 左右双旋 4.4 右左双旋 五、AVL树的验证 六、AVL树的性能 七、完整代码 前言 前面对 map/multimap/set/multiset 进行了简单的介绍,在其文…...

React 服务端渲染

React 服务器端渲染概念回顾什么是客户端渲染CSR(Client Side Rendering)服务器端只返回json数据,Data和Html的拼接在客户端进行(渲染)。什么是服务器端渲染SSR(Server Side Rendering)服务器端返回数据拼接过后的HTML,Data和Html…...

【算法设计-搜索】回溯法应用举例(1)

文章目录0. 回溯模板1. 走楼梯2. 机器走格子,但限定方向3. 中国象棋,马走日字4. 走迷宫5. 积木覆盖0. 回溯模板 搜索算法中的回溯策略,也是深度优先搜索的一种策略,比较接近早期的人工智能。毕竟,搜索是人工智能技术中…...

C++基础了解-23-C++ 多态

C 多态 一、C 多态 多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。 C 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。 下面的实例中,基类 Shape 被…...

【GNN/深度学习】常用的图数据集(资源包)

【GNN/深度学习】常用的图数据集(图结构) 文章目录【GNN/深度学习】常用的图数据集(图结构)1. 介绍2. 图数据集2.1 Cora2.2 Citeseer2.3 Pubmed2.4 DBLP2.5 ACM2.6 AMAP & AMAC2.7 WIKI2.8 COCS2.9 BAT2.10 EAT2.11 UAT2.12 C…...

Clickhouse中bitmap介绍以及计算留存Demo

前言 参考了腾迅的大数据分析-计算留存,能够根据用户自定义属性,以及玩家行为进行留存的计算。最初计算留存的方法使用的是clickhosue自带的rentention函数,使用这个函数不用关注太多细节,只需要把留存条件放入函数即可。但是这个如果需要关联用户属性,就比较麻烦了。因此…...

大数据是什么?学习后能找高薪工作么

大数据是什么,比较官方的定义是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。 简单来说,大数据就是结构化的…...

如何提取视频中的音频转文字?分享提效减负视频转文字方法

最近我在学做短视频,就看了很多博主怎么做视频,像他们的拍摄方法、剪辑角度还有怎么写文案。我一开始只看了一两个博主,写文案时就是边看视频边打字,这视频量少还好,视频多了就觉得这种方法好费时间,感觉一…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

Map相关知识

数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...