Python测试开发进阶路线

Python测试开发进阶路线

1. 掌握Python基础知识

数据类型

  • 整数类型:123-4560

  • 浮点数类型:3.141.23e-5

  • 字符串类型:'hello'"world"'''多行字符串'''

  • 列表类型:[1, 2, 3]['a', 'b', 'c']

  • 元组类型:(1, 2, 3)('a', 'b', 'c')

  • 字典类型:{'name': 'Tom', 'age': 18}

  • 集合类型:{'apple', 'banana', 'orange'}

控制流语句

  • if语句

if 条件:
    # 条件成立执行的代码
else:
    # 条件不成立执行的代码
  • for循环

for 变量 in 可迭代对象:
    # 循环体中执行的代码
  • while循环

while 条件:
    # 循环体中执行的代码
  • break语句

while 条件:
    if 满足条件:
        break
  • continue语句

for 变量 in 可迭代对象:
    if 满足条件:
        continue
    # 循环体中执行的代码

函数和模块

  • 函数

    def add(a, b):
        return a + b
    
    result = add(1, 2)
    print(result)  # 输出3
    
  • 模块

    # 创建一个名为my_module.py的文件
    def greeting(name):
        print("Hello, " + name)
    
    # 在另一个文件中使用模块
    import my_module
    
    my_module.greeting("Alice")  # 输出Hello, Alice
    

面向对象编程- 面向对象编程

  1. 创建类和对象

    class Dog:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def sit(self):
            print(f"{self.name} is now sitting.")
    
    my_dog = Dog('Willie', 6)
    print(f"My dog's name is {my_dog.name}.")
    print(f"My dog is {my_dog.age} years old.")
    my_dog.sit()
    
  2. 继承和多态

    class Animal:
        def __init__(self, name):
            self.name = name
    
        def make_sound(self):
            pass
    
    class Dog(Animal):
        def make_sound(self):
            return "woof"
    
    class Cat(Animal):
        def make_sound(self):
            return "meow"
    
    def animal_sound(animal):
        print(animal.make_sound())
    
    dog = Dog("Rufus")
    cat = Cat("Mittens")
    
    animal_sound(dog)
    animal_sound(cat)
    
  3. 封装和属性

    class Person:
        def __init__(self, name, age):
            self._name = name
            self._age = age
    
        def get_name(self):
            return self._name
    
        def set_name(self, name):
            self._name = name
    
        def get_age(self):
            return self._age
    
        def set_age(self, age):
            self._age = age
    
    person = Person("Bob", 25)
    print(person.get_name())
    person.set_name("Robert")
    print(person.get_name())
    print(person.get_age())
    person.set_age(30)
    print(person.get_age())
    
  4. 魔术方法

    class Vector:
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
        def __add__(self, other):
            return Vector(self.x + other.x, self.y + other.y)
    
        def __sub__(self, other):
            return Vector(self.x - other.x, self.y - other.y)
    
        def __mul__(self, other):
            return Vector(self.x * other.x, self.y * other.y)
    
        def __str__(self):
            return f"({self.x}, {self.y})"
    
    v1 = Vector(1, 2)
    v2 = Vector(3, 4)
    
    print(v1 + v2)
    print(v1 - v2)
    print(v1 * v2)
    

2. 掌握自动化测试框架

熟悉unittest框架

  • 使用unittest编写一个简单的测试用例:

    import unittest
    
    class TestStringMethods(unittest.TestCase):
    
        def test_upper(self):
            self.assertEqual('foo'.upper(), 'FOO')
    
        def test_isupper(self):
            self.assertTrue('FOO'.isupper())
            self.assertFalse('Foo'.isupper())
    
        def test_split(self):
            s = 'hello world'
            self.assertEqual(s.split(), ['hello', 'world'])
            # check that s.split fails when the separator is not a string
            with self.assertRaises(TypeError):
                s.split(2)
    
    if __name__ == '__main__':
        unittest.main()
    
  • 使用unittest的setUp和tearDown方法:

    import unittest
    
    class SomeTest(unittest.TestCase):
    
        def setUp(self):
            # 在每个测试方法之前执行
            pass
    
        def tearDown(self):
            # 在每个测试方法之后执行
            pass
    
        def test_first(self):
            # 测试用例
            pass
    
        def test_second(self):
            # 测试用例
            pass
    
    if __name__ == '__main__':
        unittest.main()
    
  • 使用unittest的TestSuite组织测试用例:

    import unittest
    
    class TestStringMethods(unittest.TestCase):
    
        def test_upper(self):
            self.assertEqual('foo'.upper(), 'FOO')
    
        def test_isupper(self):
            self.assertTrue('FOO'.isupper())
            self.assertFalse('Foo'.isupper())
    
        def test_split(self):
            s = 'hello world'
            self.assertEqual(s.split(), ['hello', 'world'])
            # check that s.split fails when the separator is not a string
            with self.assertRaises(TypeError):
                s.split(2)
    
    class TestMyStuff(unittest.TestCase):
    
        def test_stuff(self):
            # 测试用例
            pass
    
    if __name__ == '__main__':
        suite = unittest.TestSuite()
        suite.addTest(TestStringMethods())
        suite.addTest(TestMyStuff())
        unittest.TextTestRunner().run(suite)
    
  • 使用unittest的mock模块进行单元测试:

    from unittest.mock import MagicMock
    
    class ProductionClass:
        def method(self):
            self.something(1, 2, 3)
    
        def something(self, a, b, c):
            pass
    
    def test_method():
        real = ProductionClass()
        real.something = MagicMock()
        real.method()
        real.something.assert_called_once_with(1, 2, 3)
    
  • 使用unittest的HTMLTestRunner生成测试报告:

    import unittest
    import HTMLTestRunner
    
    class TestStringMethods(unittest.TestCase):
    
        def test_upper(self):
            self.assertEqual('foo'.upper(), 'FOO')
    
        def test_isupper(self):
            self.assertTrue('FOO'.isupper())
            self.assertFalse('Foo'.isupper())
    
        def test_split(self):
            s = 'hello world'
            self.assertEqual(s.split(), ['hello', 'world'])
            # check that s.split fails when the separator is not a string
            with self.assertRaises(TypeError):
                s.split(2)
    
    if __name__ == '__main__':
        suite = unittest.TestSuite()
        suite.addTest(TestStringMethods())
        with open('report.html', 'w') as f:
            runner = HTMLTestRunner.HTMLTestRunner(stream=f, title='Test Report', description='This is a test report')
            runner.run(suite)
    

掌握pytest框架

  • 学习pytest框架的基本概念和使用方法

  • 掌握pytest的fixture机制,实现测试用例的前置和后置处理

  • 熟悉pytest的参数化测试功能,提高测试用例的复用性和可维护性

  • 学习pytest的插件机制,扩展pytest的功能和定制化测试流程

  • 使用pytest-html插件生成测试报告,方便测试结果的查看和分析

  • 使用pytest-xdist插件实现测试用例的并发执行,提高测试效率

熟悉Robot Framework- 熟悉Robot Framework

  • 使用Robot Framework编写一个简单的测试用例

  • 使用Robot Framework编写一个包含关键字、变量、循环等高级特性的测试用例

  • 使用Robot Framework集成Selenium进行Web自动化测试

  • 使用Robot Framework集成Appium进行移动端自动化测试

  • 使用Robot Framework集成接口测试工具进行接口自动化测试

  • 使用Robot Framework集成数据库进行数据验证测试

  • 使用Robot Framework集成Jenkins进行持续集成测试

3. 掌握Web自动化测试

熟悉Selenium WebDriver

  • 使用Selenium WebDriver进行简单的页面操作,如打开网页、输入文本、点击按钮等

  • 使用Selenium WebDriver进行元素定位,如通过id、name、class name、tag name、link text、partial link text和xpath等方式定位元素

  • 使用Selenium WebDriver进行常见的页面操作,如下拉框、弹窗、多窗口等操作

  • 使用Selenium WebDriver进行常见的断言,如判断元素是否存在、元素文本是否正确、元素属性是否正确等

  • 使用Selenium WebDriver进行常见的等待,如显示等待、隐式等待等

  • 使用Selenium WebDriver进行简单的测试用例编写和执行

  • 使用Selenium WebDriver进行数据驱动测试,如使用Excel或CSV文件进行测试数据的读取和使用

  • 使用Selenium WebDriver进行测试报告的生成和展示

  • 使用Selenium WebDriver进行多浏览器测试,如Chrome、Firefox、IE、Edge等

  • 使用Selenium WebDriver进行分布式测试,如使用Selenium Grid进行多机器并发测试

  • 使用Selenium WebDriver进行框架搭建,如Page Object模式的实现

  • 使用Selenium WebDriver进行自动化测试的最佳实践和常见问题解决方案

  • 使用Selenium WebDriver进行性能测试,如使用Selenium WebDriver结合JMeter进行负载测试

  • 使用Selenium WebDriver进行安全测试,如使用Selenium WebDriver进行常见的Web安全测试,如XSS、CSRF、SQL注入等

  • 使用Selenium WebDriver进行移动端自动化测试,如使用Appium进行Android和iOS自动化测试

  • 使用Selenium WebDriver进行桌面端自动化测试,如使用WinAppDriver进行Windows桌面应用自动化测试

  • 表格:Selenium WebDriver常见API及用法

掌握Page Object模式

  • Page Object模式实例:

    页面 类名
    登录页 LoginPage
    首页 HomePage
    购物车页 CartPage
    class LoginPage:
        def __init__(self, driver):
            self.driver = driver
            self.username_input = driver.find_element_by_id("username")
            self.password_input = driver.find_element_by_id("password")
            self.login_button = driver.find_element_by_id("login-button")
            
        def login(self, username, password):
            self.username_input.send_keys(username)
            self.password_input.send_keys(password)
            self.login_button.click()
            
    class HomePage:
        def __init__(self, driver):
            self.driver = driver
            self.username_label = driver.find_element_by_id("username-label")
            self.logout_button = driver.find_element_by_id("logout-button")
            
        def get_username(self):
            return self.username_label.text
            
        def logout(self):
            self.logout_button.click()
            
    class CartPage:
        def __init__(self, driver):
            self.driver = driver
            self.cart_items = driver.find_elements_by_class_name("cart-item")
            
        def get_cart_items(self):
            return [item.text for item in self.cart_items]
    

熟悉Web自动化测试框架,如:Pytest-HTML、HTMLTestRunner- 熟悉Pytest-HTML框架

熟悉HTMLTestRunner框架

4. 掌握接口自动化测试

熟悉HTTP协议

  • 熟悉HTTP请求方法,如GET、POST、PUT、DELETE等

  • 熟悉HTTP请求头和响应头的常见字段,如Content-Type、Authorization等

  • 熟悉HTTP状态码的含义,如200、404、500等

  • 熟悉HTTP常见安全机制,如SSL、TLS等

  • 掌握使用Python编写HTTP请求和解析HTTP响应的方法

  • 掌握使用Python编写接口自动化测试用例和测试报告的方法

  • 掌握使用Python编写接口自动化测试框架的方法(如unittest、pytest、requests等)

掌握Requests库

  • 使用Requests库发送GET请求并获取响应内容:

import requests

response = requests.get('http://example.com')
print(response.text)
  • 使用Requests库发送POST请求并获取响应内容:

import requests

data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('http://example.com', data=data)
print(response.text)
  • 使用Requests库发送带Headers的请求并获取响应内容:

import requests

headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get('http://example.com', headers=headers)
print(response.text)
  • 使用Requests库发送带Cookies的请求并获取响应内容:

import requests

cookies = {'session_id': '123456'}
response = requests.get('http://example.com', cookies=cookies)
print(response.text)
  • 使用Requests库发送带文件的请求并获取响应内容:

import requests

files = {'file': open('example.txt', 'rb')}
response = requests.post('http://example.com', files=files)
print(response.text)
  • 使用Requests库发送带SSL证书的请求并获取响应内容:

import requests

response = requests.get('https://example.com', verify='example.crt')
print(response.text)
  • 使用Requests库发送带代理的请求并获取响应内容:

import requests

proxies = {'http': 'http://example-proxy.com', 'https': 'http://example-proxy.com'}
response = requests.get('http://example.com', proxies=proxies)
print(response.text)

熟悉接口自动化测试框架,如:HttpRunner、unittest- 熟悉HttpRunner框架,能够编写简单的接口自动化测试用例:

import requests
from httprunner import HttpRunner, Config, Step, RunRequest

class TestHttpbin(HttpRunner):
    config = Config("httpbin接口测试")

    teststeps = [
        Step(
            RunRequest("get请求", "get", "https://httpbin.org/get", 
                        headers={"User-Agent": "HttpRunner"},
                        response_json={"headers": {"User-Agent": "HttpRunner"}})
        ),
        Step(
            RunRequest("post请求", "post", "https://httpbin.org/post", 
                        headers={"User-Agent": "HttpRunner"},
                        data={"key": "value"},
                        response_json={"headers": {"User-Agent": "HttpRunner"}, "form": {"key": "value"}})
        )
    ]
  • 熟悉unittest框架,能够编写简单的接口自动化测试用例:
    import unittest
    import requests
    
    class TestHttpbin(unittest.TestCase):
        def test_get(self):
            response = requests.get("https://httpbin.org/get", headers={"User-Agent": "unittest"})
            self.assertEqual(response.status_code, 200)
            self.assertEqual(response.json()["headers"]["User-Agent"], "unittest")
    
        def test_post(self):
            response = requests.post("https://httpbin.org/post", headers={"User-Agent": "unittest"}, data={"key": "value"})
            self.assertEqual(response.status_code, 200)
            self.assertEqual(response.json()["headers"]["User-Agent"], "unittest")
            self.assertEqual(response.json()["form"]["key"], "value")
    

5. 掌握性能测试

熟悉性能测试原理

  • 熟悉性能测试的基本概念和原理

  • 掌握性能测试的常用工具和框架,例如JMeter、LoadRunner、Python性能测试框架等

  • 能够编写性能测试脚本并进行性能测试

  • 能够分析性能测试结果并提出优化建议

  • 了解性能测试的常见误区和注意事项

  • 实践:使用JMeter进行接口性能测试,并分析测试结果。

掌握Locust框架

  • 使用Locust框架编写性能测试脚本

  • 配置Locust文件,定义用户行为、任务流程、负载等

  • 运行Locust测试,查看测试结果

  • 分析测试结果,优化系统性能

熟悉Jmeter工具- 使用Jmeter工具进行基本的性能测试,例如模拟多用户并发访问

  • 使用Jmeter进行分布式性能测试,例如模拟多个服务器同时接受请求

  • 使用Jmeter进行负载测试,例如模拟高并发情况下服务器的响应能力

  • 使用Jmeter进行压力测试,例如模拟服务器长时间高负荷运行的情况

  • 使用Jmeter进行断言测试,例如验证接口返回数据是否符合预期

  • 使用Jmeter进行参数化测试,例如通过CSV文件传递参数进行测试

  • 使用Jmeter进行监控测试,例如对服务器资源进行监控并生成报告

  • 使用Jmeter进行API测试,例如对RESTful API进行测试

  • 使用Jmeter进行WebSocket测试,例如对WebSocket协议进行测试

  • 使用Jmeter进行FTP测试,例如对FTP协议进行测试

  • 使用Jmeter进行SMTP测试,例如对SMTP协议进行测试

  • 使用Jmeter进行数据库测试,例如对数据库进行读写性能测试

  • 使用Jmeter进行分布式测试,例如多个Jmeter节点协同进行测试

  • 使用Jmeter进行性能测试数据分析,例如对测试结果进行统计和分析

  • 使用Jmeter进行性能测试报告生成,例如生成HTML格式的测试报告

  • 使用Jmeter进行性能测试脚本编写,例如编写Jmeter脚本实现指定的性能测试场景。

6. 掌握持续集成与持续交付

熟悉Jenkins

  • 熟悉Jenkins的安装和配置

  • 熟悉Jenkins的插件安装和使用

  • 熟悉Jenkins的任务配置和构建流程

  • 能够使用Jenkins进行持续集成和持续交付的实践

  • 熟悉Jenkins的常见问题排查和解决方法

掌握Git版本控制工具

  • 掌握Git版本控制工具

    • 熟悉Git基本操作,包括commit、push、pull、merge等

    • 掌握Git分支管理,包括创建、合并、删除分支等操作

    • 熟悉Git工作流程,包括Fork、Pull Request等

    • 熟悉Git代码Review流程,包括代码Review工具的使用和Review标准的制定

    • 了解Git的高级用法,包括rebase、cherry-pick等

    • 了解Git的原理和内部机制,包括Git对象、Git索引、Git引用等

    • 掌握Git的使用场景,包括个人开发、团队协作、开源项目等

    • 了解Git的扩展和工具,包括Git LFS、Git Submodule、GitLab等。

熟悉Docker容器技术- 熟悉Docker容器技术

  • 能够使用Dockerfile构建镜像并运行容器

  • 能够使用Docker Compose编排容器

  • 能够使用Docker Hub或私有仓库管理镜像

  • 能够在持续集成和持续交付中应用Docker技术,实现快速部署和回滚。

7. 掌握测试数据管理

熟悉数据库基础知识

  • 掌握SQL语句的基本语法

  • 熟悉关系型数据库的基本概念

  • 掌握使用Python操作数据库的方法

  • 熟悉数据库的增删改查等操作

  • 掌握使用ORM框架进行数据库操作

  • 熟悉数据库事务的概念和使用方法

  • 了解数据库的性能优化方法

  • 掌握使用Mock库进行数据库测试

  • 熟悉使用表格存储测试数据的方法

掌握SQL语言

  • 熟悉SQL语言基础语法,能够编写基本的SQL查询语句。

  • 掌握SQL语言的高级应用,如联合查询、子查询、分组查询、排序等。

  • 熟悉SQL语言的数据操作语句,如插入、删除、更新等。

  • 熟悉SQL语言的数据约束语句,如主键、外键、唯一性约束等。

  • 掌握SQL语言的事务处理,能够编写事务处理代码。

  • 熟悉SQL语言的视图、存储过程、触发器等高级应用。

  • 熟悉SQL语言在测试数据管理中的应用,能够编写复杂的测试数据查询、更新、删除等SQL语句。

熟悉数据生成工具,如:Faker、Mock- 熟悉Faker数据生成工具,可以使用Faker生成各种类型的随机数据,如姓名、地址、电话号码、电子邮件等。

from faker import Faker

fake = Faker()
print(fake.name())  # 随机生成一个姓名
print(fake.address())  # 随机生成一个地址
print(fake.phone_number())  # 随机生成一个电话号码
print(fake.email())  # 随机生成一个电子邮件
  • 熟悉Mock数据生成工具,可以使用Mock生成各种类型的虚拟数据,如数字、字符串、日期等。

    from unittest.mock import Mock
    
    mock = Mock()
    mock.return_value = 100  # 设置Mock对象的返回值为100
    print(mock())  # 输出100
    mock.return_value = 'hello'
    print(mock())  # 输出'hello'
    mock.return_value = datetime.datetime(2022, 1, 1)
    print(mock())  # 输出2022-01-01 00:00:00
    
  • 掌握使用测试数据管理工具,如DataFactory等,可以更加方便地管理和生成测试数据。可以使用DataFactory定义数据模板,然后生成符合模板的测试数据。

    from datafactory import DataFactory
    
    # 定义数据模板
    data_template = {
        'name': 'string',
        'age': 'integer',
        'email': 'email',
        'address': {
            'city': 'string',
            'street': 'string',
            'zipcode': 'string'
        }
    }
    
    # 生成测试数据
    data = DataFactory.generate(data_template)
    print(data)
    

    输出结果:

    {
        'name': 'Zoey',
        'age': 28,
        'email': '[email protected]',
        'address': {
            'city': 'New York',
            'street': 'Main Street',
            'zipcode': '10001'
        }
    }
    

8. 掌握测试报告与日志

熟悉测试报告生成工具,如:Pytest-HTML、HTMLTestRunner

  • 熟悉Pytest-HTML测试报告生成工具,能够使用Pytest-HTML生成测试报告,并且能够对测试报告进行定制化配置。

  • 熟悉HTMLTestRunner测试报告生成工具,能够使用HTMLTestRunner生成测试报告,并且能够对测试报告进行定制化配置。

掌握日志记录与分析

  • 掌握日志记录与分析:

    • 使用Python logging模块记录日志

    • 配置日志输出格式和级别

    • 使用ELK等工具对日志进行分析和可视化展示

    • 使用pytest-html等工具生成测试报告并进行定制化配置

熟悉ELK日志分析工具- 熟悉ELK日志分析工具

  • 学习ELK日志分析工具的基本概念和使用方法

  • 使用ELK日志分析工具分析测试过程中产生的日志,查找问题和异常

  • 根据ELK日志分析结果,生成测试报告并且提出改进建议

9. 掌握安全测试

熟悉安全测试基础知识

  • 掌握常见的安全漏洞类型,如SQL注入、XSS攻击、CSRF攻击等

  • 了解OWASP Top 10安全漏洞清单

  • 熟悉Web安全测试工具的使用,如Burp Suite、OWASP ZAP等

  • 掌握安全测试的流程和方法,如黑盒测试、白盒测试、灰盒测试等

  • 熟悉安全测试报告的编写和分析,了解如何提供有效的修复建议

  • 了解常见的安全防护措施,如验证码、加密传输、安全认证等

  • 掌握安全测试在CI/CD流程中的应用,如如何在自动化测试中集成安全测试

  • 了解移动应用安全测试的基础知识,如安全沙箱、反编译等

  • 掌握常见的移动应用安全漏洞类型,如数据泄露、权限绕过、代码注入等

  • 熟悉移动应用安全测试工具的使用,如MobSF、AndroBugs等

掌握OWASP测试工具

  • OWASP ZAP:使用ZAP进行Web应用程序漏洞扫描和安全测试。

  • OWASP Dependency-Check:使用Dependency-Check扫描应用程序依赖项中的已知漏洞。

  • OWASP WebScarab:使用WebScarab进行Web应用程序安全测试和漏洞扫描。

  • OWASP SQLMap:使用SQLMap进行SQL注入漏洞扫描和测试。

  • OWASP DirBuster:使用DirBuster进行Web应用程序目录和文件扫描。

  • OWASP Mantra:基于Firefox的安全测试平台,提供多种安全测试工具和插件。

  • OWASP Broken Web Applications:一套专门为安全测试而设计的漏洞应用程序,用于练习和测试安全测试技能。

熟悉Web安全测试框架,如:WebGoat、DVWA- 熟悉WebGoat安全测试框架,能够使用该框架进行常见的Web安全测试,如SQL注入、XSS等。

  • 熟悉DVWA安全测试框架,能够使用该框架进行常见的Web安全测试,如文件上传、文件包含等。

10. 掌握移动端自动化测试

熟悉Appium框架

  • 安装Appium框架

  • 配置Appium环境

  • 学习Appium API

  • 编写Appium测试用例

  • 实现Appium自动化测试报告

  • 使用Appium实现UI自动化测试

  • 使用Appium实现性能测试

  • 使用Appium实现安全测试

  • 使用Appium实现兼容性测试

  • 使用Appium实现压力测试

  • 使用Appium实现数据驱动测试

  • 使用Appium实现测试数据管理

  • 使用Appium实现测试用例管理

  • 使用Appium实现测试结果管理

  • 使用Appium实现测试过程管理

  • 使用Appium实现测试自动化集成

  • 使用Appium实现持续集成和持续交付

  • 使用Appium实现测试自动化运维

  • 使用Appium实现测试自动化监控

  • 使用Appium实现测试自动化优化

  • 使用Appium实现测试自动化开发

掌握移动端自动化测试原理

  • 掌握移动端自动化测试原理:

    • 移动端自动化测试的基本原理

    • 移动端自动化测试框架的选择和使用

    • 移动端自动化测试工具的使用和配置

    • 移动端自动化测试用例的设计和执行

    • 移动端自动化测试结果的分析和报告

熟悉移动端自动化测试工具,如:MonkeyRunner、UI Automator- 熟悉MonkeyRunner工具的使用

MonkeyRunner是Android自带的一款测试工具,可以用来进行Android应用程序的自动化测试。它可以在设备或模拟器上运行Python脚本,模拟用户操作,比如点击、滑动、输入等,从而进行自动化测试。

  • 熟悉UI Automator工具的使用

    UI Automator是Google提供的一款用于Android应用自动化测试的工具,它可以模拟用户的操作,比如点击、滑动、输入等,从而对应用进行自动化测试。UI Automator可以跨应用、跨进程进行测试,可以获取应用的界面元素,比如TextView、Button等,还可以获取应用的截图。

以上是Python测试开发进阶路线的大纲,掌握这些技能可以让你成为一名优秀的测试工程师。

最后: 下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取【保证100%免费】

在这里插入图片描述

 这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

软件测试技术交流群社:786229024(里面还有工作内推机会,毕竟我们是关系社会。)

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

面试文档获取方式:

猜你喜欢

转载自blog.csdn.net/wx17343624830/article/details/130010111
今日推荐