一、知识汇总

掌握 Python 编程语言需要具备一定的基础知识和技能,特别是对于从事自动化测试等领域的工程师。以下是掌握 Python 的一些关键方面:

基本语法: 理解 Python 的基本语法,包括变量、数据类型、运算符、条件语句、循环语句等。

数据结构: 熟悉并能够使用 Python 的常见数据结构,如列表、元组、字典和集合。

函数和模块: 能够定义和调用函数,了解模块的概念,并能够使用标准库中的模块。

异常处理: 了解异常处理机制,能够编写代码来处理可能出现的异常情况。

文件操作: 能够进行文件的读写操作,理解文件对象和文件处理方法。

面向对象编程(OOP): 了解面向对象编程的基本概念,包括类、对象、继承、多态等。

模块化和代码复用: 能够编写可重用的模块,实现代码的模块化和可维护性。

测试框架: 对于自动化测试工程师,掌握至少一种 Python 测试框架,如 Pytest 或 unittest。

版本控制系统: 了解并能够使用 Git 进行版本控制,以便协同开发和管理代码。

虚拟环境和依赖管理: 能够使用虚拟环境管理 Python 项目的依赖,如使用 virtualenv 或 venv。

基本的网络和 Web 开发知识: 对于自动化测试,理解基本的网络通信和 Web 开发概念,包括 HTTP/HTTPS 协议、API 测试等。

常用库和框架: 熟悉并能够使用 Python 的一些常用库和框架,例如 requests(处理 HTTP 请求)、Beautiful Soup(解析 HTML)、Selenium(Web 自动化测试)等。

这些都是掌握 Python 编程语言时的基本要求。具体要求还可能受到所从事的具体工作领域和项目的影响。随着经验的积累,可以逐渐深入学习 Python 的高级特性和更复杂的应用场景。

二、Python基本语法

1. 变量和数据类型

# 变量赋值x = 5name = "John"# 数据类型number = 10# 整数float_number = 3.5 # 浮点数string = "Hello" # 字符串boolean = True # 布尔值# 列表和元组my_list = [1, 2, 3]my_tuple = (1, 2, 3)# 字典my_dict = {"key": "value", "age": 25}# 集合my_set = {1, 2, 3}

2、控制流程

(1)条件语句

if x > 0:print("Positive")elif x < 0:print("Negative")else:print("Zero")

(2)循环语句

# for 循环for item in my_list:print(item)# while 循环counter = 0while counter < 5:print(counter)counter += 1

3、函数

# 函数定义def greet(name):print("Hello, " + name + "!")# 函数调用greet("Alice")

4、输入输出

# 输入user_input = input("Enter a number: ")number = int(user_input)# 输出print("The square of", number, "is", number**2)

5、异常处理

(1)try-except块:

try:result = 10 / 0except ZeroDivisionError:print("Cannot divide by zero!")finally:print("This will always execute.")

(2)多个except块:

try:value = int("abc")except ValueError:print("Error: Invalid integer format")except Exception as e:print(f"Error: {e}")

6、文件操作

# 写入文件with open("example.txt", "w") as file:file.write("Hello, Python!")# 读取文件with open("example.txt", "r") as file:content = file.read()print(content)

三、面向对象

Python 是一种面向对象的编程语言。在 Python 中,几乎一切都是对象,包括基本数据类型(如整数、浮点数、字符串)以及用户自定义的类和对象。Python 支持面向对象编程的核心概念,包括类、对象、封装、继承和多态。

1、类和对象: 在 Python 中,类是对象的模板,对象是类的实例。通过定义类,可以创建具有特定属性和方法的对象。

class Dog:def __init__(self, name):self.name = namedef bark(self):print(f"{self.name} is barking!")my_dog = Dog("Buddy")my_dog.bark()

2、封装: 封装允许将数据和方法封装在类的内部,通过对外提供公共接口来隐藏内部实现的细节。

class BankAccount:def __init__(self, balance): #构造函数self.balance = balancedef deposit(self, amount):self.balance += amountdef withdraw(self, amount):if amount <= self.balance:self.balance -= amountelse:print("Insufficient funds")account = BankAccount(1000)account.withdraw(500)

3、继承: 继承允许一个类继承另一个类的属性和方法,从而实现代码的重用和扩展。

class Animal:def speak(self):passclass Dog(Animal):def speak(self):print("Woof!")class Cat(Animal):def speak(self):print("Meow!")my_dog = Dog()my_dog.speak()

4、多态: 多态允许不同的类共享相同的接口,但具体的实现可以不同。这使得代码更灵活,能够处理不同类型的对象。

def animal_sound(animal):animal.speak()my_dog = Dog()my_cat = Cat()animal_sound(my_dog)# 输出 "Woof!"animal_sound(my_cat)# 输出 "Meow!"

四、常用的库

1、文件读写:
openpyxl: 用于处理Excel文件的库,支持读写Excel文件。
pandas: 提供高性能、易用的数据结构和数据分析工具,支持多种文件格式(如CSV、Excel)的读写。

2、生成报告:
Jinja2: 模板引擎,用于生成动态内容的报告。
ReportLab: 用于创建PDF文档的库,可用于生成带有图表和文本的报告。
Matplotlib: 用于绘制图表和图形,可以在报告中插入图表。

3、发送报告:
smtplib(内置库): 用于发送电子邮件,可用于将测试报告通过电子邮件发送。
yagmail: 简化了使用smtplib发送邮件的过程,支持HTML内容和附件。

4、测试报告框架:
HTMLTestRunner: 一个生成HTML格式测试报告的框架,适用于unittest。
pytest-html: 适用于pytest的HTML测试报告插件。

5、日志记录:
logging(内置库): Python的官方日志记录模块,可用于在测试中记录信息。
loguru: 提供更简单和强大的日志记录功能,支持文件、控制台等多种输出。

6、网络请求:
requests: 用于发送HTTP请求的库,适用于API测试。

7、通信
串口通信:serial
Can通信: python-can
import serial

# 打开串口ser = serial.Serial('COM1', 9600, timeout=1)# 发送数据ser.write(b'Hello, serial!')# 接收数据data = ser.readline()print('Received:', data)# 关闭串口ser.close()

8、其他常用库:
NumPy: 用于科学计算和数学操作的库。
Beautiful Soup: 用于从HTML和XML文档中提取信息的库。
Scrapy: 一个用于爬取网站数据的框架。
Flask/Django: 用于构建Web应用程序的框架。

五、常用的自动化测试框架

Python中有几个常用的自动化测试框架,它们提供了各种工具和功能来简化测试流程。以下是一些常见的Python自动化测试框架:

unittest: 这是Python内置的测试框架,提供了测试用例、测试套件、断言等基本测试工具。它的使用方式受到Java中JUnit的影响。

pytest: 一个功能丰富而灵活的测试框架,支持自动发现测试用例、参数化测试、丰富的插件系统等。它的语法简洁易懂,也能与其他测试工具和框架很好地集成。

nose2: 基于unittest的扩展,提供了更多功能和插件支持,支持测试发现、标记、插件等。它的目标是提供更好的发现和运行测试的方式。

Robot Framework: 一个通用的自动化测试框架,支持关键字驱动和行为驱动开发。它易于学习,可用于Web、移动应用、API等测试,并支持关键字库扩展。

Behave: 一个行为驱动开发(BDD)框架,基于Gherkin语言。它结合了自然语言的表达力和Python的强大功能,使得测试用例更具可读性。

Selenium: 虽然它主要用于Web应用程序的自动化测试,但也是一个强大的工具。通过结合Selenium WebDriver和测试框架(如pytest或unittest),可以实现更复杂的Web应用测试。

六、其它

1、元组、列表、字典、集合的区别
元组、列表、字典和集合是Python中常用的四种数据结构,它们有各自的特点和适用场景。

(1). 元组(Tuple):
表示方式: 使用圆括号 () 表示,例如:my_tuple = (1, 2, 3).
可变性: 不可变,一旦创建就不能修改。
索引访问: 支持索引访问,类似于列表。
适用场景: 适用于希望创建不可变序列的情况,例如函数返回多个值时。

(2). 列表(List)
表示方式: 使用方括号 [] 表示,例如:my_list = [1, 2, 3].
可变性: 可变,允许修改、添加或删除元素。
索引访问: 支持索引访问。
适用场景: 适用于需要一个有序、可变的集合的情况,例如存储同类型的元素。

(3). 字典(Dictionary):
表示方式: 使用花括号 {} 表示,例如:my_dict = {“key1”: “value1”, “key2”: “value2”}.
可变性: 可变,可以修改、添加或删除键值对。
键值对: 由键和值组成,通过键来访问值。
适用场景: 适用于需要存储键值对的情况,键是唯一的。

(4). 集合(Set):
表示方式: 使用花括号 {} 表示,例如:my_set = {1, 2, 3}.
可变性: 可变,可以添加或删除元素。
唯一性: 元素是唯一的,不会重复。
适用场景: 适用于需要存储无序且唯一元素的情况,例如去重。
总体而言,选择使用哪种数据结构取决于你的具体需求。元组适用于不可变序列,列表适用于有序可变集合,字典适用于键值对存储,集合适用于无序唯一元素的情况。

2、堆和栈的区别
堆和栈是两个用于管理程序运行时内存的区域。栈用于存储函数调用的上下文、局部变量等,而堆用于存储动态分配的对象、数据结构等。
内容:
堆(Heap): 用于动态分配内存,存储对象、数据结构等。在堆上分配的内存需要手动管理,通常通过new关键字来分配,并由程序员负责释放。
栈(Stack): 存储函数调用的上下文、局部变量、函数参数等,遵循后进先出(LIFO)原则。栈上的数据的生命周期与函数调用关联,当函数执行完成时,栈上的数据自动被释放。

3、构造函数

在 Python 中,构造函数 init 在创建类的实例时自动被调用,用于执行一些初始化操作。在创建实例时,首先调用构造函数,然后再执行其他的初始化代码。
以下是一个简单的示例,展示了如何在 Python 中定义和使用构造函数:
class MyClass:

# 构造函数def __init__(self, param1, param2):# 在构造函数中进行初始化操作self.attribute1 = param1self.attribute2 = param2print("Object created with attributes:", self.attribute1, self.attribute2)# 创建类的实例,会自动调用构造函数my_object = MyClass("value1", "value2")

在 Python 中,self 是一个约定俗成的参数名称,用于表示对象实例本身。它在类的方法中作为第一个参数传递,以便可以访问和操作对象的属性和方法。
即使没有传参的函数,如果是类的方法,仍然需要在参数列表中保护‘self’。

4、python中 有 public private等关键字吗?
在 Python 中,没有像其他编程语言(如Java、C++)那样明确定义的 public、private 等访问修饰符。Python采用了一种不同的方式来处理成员的可见性和访问权限。

在 Python 中,成员(变量或方法)的可见性主要通过命名约定来实现。以下是一些常见的约定:

公共成员: 通常没有特殊的命名约定,可以直接访问。

class MyClass:def __init__(self):self.public_member = 42

受保护成员: 以一个下划线 _ 开头,表示应该被视为受保护的,不建议直接访问。

class MyClass:def __init__(self):self._protected_member = 42

私有成员: 以两个下划线 __ 开头,表示是私有的,应该避免直接访问。

class MyClass:def __init__(self):self.__private_member = 42

虽然可以通过以上约定来表示可见性,但在 Python 中,这只是一种约定,而不是强制性的规则。Python 的理念之一是“我们都是成年人”,即程序员有责任遵守这些约定,而不是通过强制规则来限制访问。这也使得 Python 更加灵活和自由。