既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
8. JMeter
JMeter 同 LoadRunner 一样,都以性能测试出名,一般用 JMeter 也是做接口性能测试。例如 Java+Jmeter+Ant+Jenkins 做接口性能监听测试。JMeter 如何做接口测试,可以查阅官方文档和 CSDN 博客专栏《JMeter 性能测试》 。
上面说了这么多工具,基本覆盖了接口功能测试、接口自动化测试、接口性能测试。这里提一下**,推荐 Python 语言下的一个性能测试工具 Locust**。自己百度并安装下,很简单的 Web 界面,作为一个轻量级的协程测试工具,感觉很不错。
服务端测试也应该具备一些计算机基础知识的能力,例如下面几个领域的知识。
操作系统和网络
互联网里最大的应用场景就是高并发、高可用、高性能的线上服务,做这类系统实际上考验的是我们对操作系统和网络的理解。任何一个系统最后都是运行在操作系统之上的,也都运行在网络之上的,包括分布式系统,所以,需要在操作系统和网络上一定要有较深的造诣,尤其是高并发和高性能。
如果对操作系统原理一无所知,基本很难理解什么是并发和锁,很难理解高性能用什么指标来衡量,以及怎么实现高并发、高可用和高性能。
对于操作系统,我们必须了解 CPU 的多核体系结构、内存分页和缓存技术、磁盘 IO 的优略和网卡 IO 的情况,并且要理解计算机的工作原理,会根据这些指标粗略评估服务能够输出的性能。
对于网络,必须理解理论上定义的7层模型,了解 TCP/IP 的三次握手。另外我们在分布式服务架构中多数使用应用层的HTTP协议,所以还需要对 HTTP 协议有很深刻的理解。
算法和数据结构
应用层面的小伙伴们可能对算法和数据结构的应用比较少,即使有应用也比较简单,但是算法能力代表了一个人的逻辑思维和思考能力,能把各种基础算法理解的人智商都不会低,能够把程序写好的人逻辑思维一定很强。
一般在面试小伙伴的时候,我都会考察一下他会不会高级算法,例如递归、剪枝、贪婪、动态规划。仔细想一下就会知道,会动态规划的人,他不是勤奋的就是聪明的,无论哪一样,你都有录取他的冲动。
线上高并发服务方向
线上高并发服务是个强需求,无论你开发哪类应用和网站,线上服务都是必须的,有了服务才有了功能,才有了产品,我也主要从事互联网后台高并发服务的设计与实现。
解决高并发服务其实并没有那么难,这些年高并发服务的技术栈也已经没有了门槛,只要投入足够的成本,构建可伸缩的服务不是问题,达到多大的 TPS 也都不是问题,核心思想就是“分而治之,大而化下,小而化了”。
我们使用的缓存抗读、消息队列抗写、数据库分库分表、缓存分片、应用层伸缩、减少竞争、7层负载均衡、三四层负载均衡等,以及 CDN、DNS 轮训等等,这一切都是“分而治之”的思想。
大数据方向
大数据是最近比较火的方向,大小公司都在使用大数据技术。大公司使用大数据分析技术从众多数据中分析出业务模型,得出有价值的结果,来帮助企业制定市场和销售策略,中小公司多数使用大数据出报表和做风控等。
所有的大数据技术的根基都来自 Mapreduce、GFS 和 Bigtable 这三篇论文,推荐大家阅读这些论文:
- MapReduce: Simplifed Data Processing on Large Clusters
- The Google File System
- Bigtable: A Distributed Storage System for Structured Data
理解了这些基础技术原理,再去学习 Hadoop、HBase、Storm、Spark、Cassandra、MongoDB、ES 等都不是问题。
接口测试常用的工具、平台、框架
自动化测试可以快速自动完成大量测试用例,节约巨大的人工测试成本;同时需要拥有专业开发技能的人才能完成开发,且需要大量时间进行维护(在需求经常变化的情况下),所以大部分具有很好开发技能的人员不是很愿意编写自动化用例。但由于软件规模的高速增长,人力资源的逐步稀缺,自动化测试已是势在必行。
下面是我精选的8个 Java 测试工具和框架。
1. Arquillian
Arquillian 是一个基于 JVM 高度创新性和可扩展的测试平台,允许 Java 开发人员轻松创建自动化集成、功能和验收测试。Arquillian 允许在运行时间执行测试。可以用来管理单个或多个容器的生命周期,捆扎测试用例、从属类和资源。它还能够部署归档到容器中,在容器中执行测试、捕获结果,并创建报告。它集成了常见的测试框架,如 JUnit 4、TestNG 5,并允许使用现有的 IDE 发布测试,并且由于模块化的设计使其能够运行 Ant 和 Maven 测试插件。
2. JTest
JTest 也被称为“Parasoft JTest”,是一款由 Parasoft 公司推出的自动化 Java 软件测试和静态分析软件。JTest包含的功能有:单元测试情况下的生成和执行、静态代码分析、数据流的静态分析、度量分析、回归测试、运行时错误检测。此外,它还具备了同行代码审查流程自动化和运行时错误检测的功能,如竞态条件、异常、资源和内存泄漏、安全漏洞攻击。
3. The Grinder
The Grinder 是一个 Java 负载测试框架,运行简单,且其分布式测试采用了许多负载注入机器。只要有 Java API,The Grinder 就可以进行负载测试。这包括 HTTP Web 服务器、SOAP 和 REST Web 服务器、应用程序服务器,以及用强大的 Jython 和 Clojure 语言写的包含了自定义协议的测试脚本。
The Grinder 的 GUI 控制台允许对多个负载注射器进行监测和控制,并自动管理客户端连接和 Cookies、SSL、代理感知和节流连接。 The Grinder 在 BSD 风格的开源许可下是免费的。 官方网站:Downloading The Grinder
4. TestNG
TestNG 是一款为 Java 编程语言设计的测试框架,灵感来自于 JUnit 和 NUnit。TestNG 可覆盖范围更广的测试类型,如单元、功能性、端到端、一体化等。它还有一些新的功能,可以使之更强大和更容易使用,如注解、具备大型线程池各种策略的运行测试、多线程的代码测试、灵活的测试配置、参数化数据驱动的测试支持等等。TestNG 支持各种各样的工具和插件,比如 Eclipse、IDEA、Maven 等等。
5. JUnit
JUnit 是一个为 Java 编程语言设计的单元测试框架。JUnit 为测试驱动开发框架的发展发挥了重要作用。它是现在被统称为 xUnit 的单元测试框架大家庭的组成成员之一,源于 SUnit。在编译时,JUnit 可以连接作为 JAR,用于编写可重复的测试。
6. Powermock
PowerMock 是一款支持单元测试源代码的 Java 框架。虽然 PowerMock 可以作为 Mocking 框架,例如作为 Mockito 和 EasyMock 的扩展而运行,但它还具备更强大的能力。PowerMock 利用自定义的类加载器和字节码操纵器,来确保静态方法的模拟、静态初始化的删除、函数构造、最终的类和方法以及私有方法。它的主要目的是通过最少的方法和注释来扩展现有的 API,以获得额外的功能。
7. Cucumber
Cucumber 是 BDD 模式下实现可执行规范(Executable Specifications)的开源工具,但是它的使命并不局限于做自动化验收测试,更加重要的在于其能够在团队成员之间构建统一的交流基础(feature 文件)、规范交流用语(Domain Specific Language)、提高各个利益相关方(Business Stakeholders)沟通效率和效果,从而达到提升产品质量、做出客户期望得到的产品这一最终目标。
8. Python Unittest
Python 单元测试框架 Unittest,是基于 Java 中流行单元测试框架 JUnit 设计的,其功能强大且灵活,对于熟悉 JUnit 的人来说,掌握 Unittest 很简单。
Unittest 涉及的知识点较多,但核心的只有一部分,本文将介绍它最核心和基础的内容。
类似 JUnit,使用 Unittest 编写 Python 的单元测试代码,包括如下几个步骤:
- 编写一个 Python 类,继承 Unittest 模块中的 TestCase 类,这就是一个测试类。
- 在上面编写的测试类中定义测试方法(这个就是指的测试用例),每个方法的方法名要求以 test 打头,没有额外的参数。在该测试方法中调用被测试代码,校验测试结果,TestCase 类中提供了很多标准的校验方法,如最常见的 assertEqual。
- 执行 unittest.main() ,该函数会负责运行测试,它会实例化所有 TestCase 的子类,并运行其中所有以 test 打头的方法。
以下是Python Unittest 测试用例执行的关系图。
我们下面看一些例子,编写如下的 Python文件。
(1)手工加载批量用例。
import unittestclass TestOne(unittest.TestCase):
def setUp(self):
print '\ncases before'
pass
-
def test_add(self):
'''test add method'''
print 'add...'
a = 3 + 4
b = 7
self.assertEqual(a, b) def test_sub(self):
'''test sub method'''
print 'sub...'
a = 10 - 5
b = 5
self.assertEqual(a, b) def tearDown(self):
print 'case after'
passif __name__ == '__main__': # 1、构造用例集
suite = unittest.TestSuite() # 2、执行顺序是安加载顺序:先执行test_sub,再执行test_add
suite.addTest(TestOne("test_sub"))
suite.addTest(TestOne("test_add")) # 3、实例化runner类
runner = unittest.TextTestRunner() # 4、执行测试
runner.run(suite)
(2)自动加载批量用例。
import unittestimport osclass TestOne(unittest.TestCase):
def setUp(self):
print '\ncases before'
pass
-
def test_add(self):
'''test add method'''
print 'add...'
a = 3 + 4
b = 7
self.assertEqual(a, b) def test_sub(self):
'''test sub method'''
print 'sub...'
a = 10 - 5
b = 5
self.assertEqual(a, b) def tearDown(self):
print 'case after'
passif __name__ == '__main__': # 1、设置待执行用例的目录
test_dir = os.path.join(os.getcwd()) # 2、自动搜索指定目录下的cas,构造测试集,执行顺序是命名顺序:先执行test_add,再执行test_sub
discover = unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py') # 实例化TextTestRunner类
runner = unittest.TextTestRunner() # 使用run()方法运行测试套件(即运行测试套件中的所有用例)
runner.run(discover)
接口测试的一些问题和实践
以 TestNG 为例,它是一套根据 JUnit 和 NUnit 思想而构建的利用注释来强化测试功能的一个测试框架。TestNG 设计涵盖所有类型的测试,如单元、功能、端到端、集成等。学习 TestNG 之前需要先学习编程语言 Java、配置本地 JDK 环境(JDK1.5 版本或以上)和安装 Java 开发工具 Eclipse。
接下来,我们一起来学习 TestNG。
1. 在 Eclipse 中安装 TestNG。
打开 Eclipse Help -> MarketPlace,在搜索框里面输入 TestNG 搜索,然后安装 TestNG 插件。
2. 安装成功后,在项目的 package 上右键可以看到 TestNG -> Create TestNG class。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
50)]
[外链图片转存中…(img-XwDZI4WK-1715499093650)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!