自动化理论基础(2)—开发语言之Python

一、知识汇总

掌握 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. 变量和数据类型

python 复制代码
# 变量赋值
x = 5
name = "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)条件语句

python 复制代码
if x > 0:
    print("Positive")
elif x < 0:
    print("Negative")
else:
    print("Zero")

(2)循环语句

python 复制代码
# for 循环
for item in my_list:
    print(item)

# while 循环
counter = 0
while counter < 5:
    print(counter)
    counter += 1

3、函数

python 复制代码
# 函数定义
def greet(name):
    print("Hello, " + name + "!")

# 函数调用
greet("Alice")

4、输入输出

python 复制代码
# 输入
user_input = input("Enter a number: ")
number = int(user_input)

# 输出
print("The square of", number, "is", number**2)

5、异常处理

(1)try-except块:

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

(2)多个except块:

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

6、文件操作

python 复制代码
# 写入文件
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 中,类是对象的模板,对象是类的实例。通过定义类,可以创建具有特定属性和方法的对象。

python 复制代码
class Dog:
    def __init__(self, name):
        self.name = name

    def bark(self):
        print(f"{self.name} is barking!")

my_dog = Dog("Buddy")
my_dog.bark()

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

python 复制代码
class BankAccount:
    def __init__(self, balance): #构造函数
        self.balance = balance

    def deposit(self, amount):
        self.balance += amount

    def withdraw(self, amount):
        if amount <= self.balance:
            self.balance -= amount
        else:
            print("Insufficient funds")

account = BankAccount(1000)
account.withdraw(500)

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

python 复制代码
class Animal:
    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        print("Woof!")

class Cat(Animal):
    def speak(self):
        print("Meow!")

my_dog = Dog()
my_dog.speak()

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

python 复制代码
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

python 复制代码
# 打开串口
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:

python 复制代码
    # 构造函数
    def __init__(self, param1, param2):
        # 在构造函数中进行初始化操作
        self.attribute1 = param1
        self.attribute2 = param2
        print("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 中,成员(变量或方法)的可见性主要通过命名约定来实现。以下是一些常见的约定:

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

python 复制代码
class MyClass:
    def __init__(self):
        self.public_member = 42

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

python 复制代码
class MyClass:
    def __init__(self):
        self._protected_member = 42

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

python 复制代码
class MyClass:
    def __init__(self):
        self.__private_member = 42

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

相关推荐
谢眠3 分钟前
深度学习day3-自动微分
python·深度学习·机器学习
z千鑫13 分钟前
【人工智能】深入理解PyTorch:从0开始完整教程!全文注解
人工智能·pytorch·python·gpt·深度学习·ai编程
流星白龙28 分钟前
【C++习题】10.反转字符串中的单词 lll
开发语言·c++
尘浮生35 分钟前
Java项目实战II基于微信小程序的校运会管理系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
MessiGo36 分钟前
Python 爬虫 (1)基础 | 基础操作
开发语言·python
Tech Synapse42 分钟前
Java根据前端返回的字段名进行查询数据的方法
java·开发语言·后端
乌啼霜满天2491 小时前
JDBC编程---Java
java·开发语言·sql
肥猪猪爸1 小时前
使用卡尔曼滤波器估计pybullet中的机器人位置
数据结构·人工智能·python·算法·机器人·卡尔曼滤波·pybullet
色空大师1 小时前
23种设计模式
java·开发语言·设计模式
Bruce小鬼1 小时前
QT文件基本操作
开发语言·qt