自动化理论基础(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. 变量和数据类型

# 变量赋值
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)条件语句

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

(2)循环语句

# for 循环
for item in my_list:print(item)# while 循环
counter = 0
while 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 / 0
except 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 更加灵活和自由。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/625976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 设计模式之桥接模式

【声明】本题目来源于卡码网&#xff08;题目页面 (kamacoder.com)&#xff09; 【提示&#xff1a;如果不想看文字介绍&#xff0c;可以直接跳转到C编码部分】 【简介】什么是桥接模式 桥接模式&#xff08;Bridge Pattern&#xff09;是⼀种结构型设计模式&#xff0c;它的U…

倍福嵌入式PLC开发团队建设

倍福嵌入式PLC开发工程师确实比较难找&#xff0c;这是因为这个领域需要具备丰富的专业知识和技能&#xff0c;而且经验越丰富的工程师越难找到。以下是一些可能导致倍福嵌入式PLC开发工程师难找的原因&#xff1a; 具备相关技能的工程师数量相对较少&#xff1a;嵌入式PLC开发…

777 权限 撤回

Linux误执行chmod -R 777 / 后的成功挽救方法_误操作chmod 777-CSDN博客 cd /etcchmod 644 passwd group shadow chmod 400 gshadow cd sshchmod 600 moduli ssh_host_dsa_key ssh_host_key ssh_host_rsa_key chmod 644 ssh_config ssh_host_dsa_key.pub ssh_host_key.pub …

XUbuntu22.04之免费思维导图工具(二百零六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Kafka集群的安装与配置

一、安装JDK 1、在usr目录下新建Java目录&#xff0c;然后将下载的JDK拷贝到这个新建的Java目录中1 创建目录命令&#xff1a;mkdir /usr/java 2、进入到Java目录中解压下载的JDK 解压命令&#xff1a;tar -zxvf jdk-18_linux-x64_bin.tar.gz 在1主机上&#xff0c;将安装包…

SQL-用户管理与用户权限

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出现错误&am…

FPGA之LUT

由于FPGA需要被反复烧写,它实现组合逻辑的基本结构不可能像ASIC那样通过固定的与非门来完成,而只能采用一种易于反复配置的结构。查找表可以很好地满足这一要求,目前主流FPGA都采用了基于SRAM工艺的查找表结构。LUT本质上就是一个RAM.它把数据事先写入RAM后,每当输入一个信号就…

【Python】tensor格式数据转为图像,并保存图像详解和示例

在项目中遇到一个tensor格式的数据&#xff0c;要保存为图像&#xff0c;此文对转换过程通过示例分享&#xff0c;以记录学习过程和帮助大家遇到同类问题时使用。 import torch import cv2 import numpy as np# 创建一个示例张量&#xff08;tensor&#xff09; input_tensor …

classNames 用法

classNames 是一个非常流行的 JavaScript 库&#xff0c;用于在 React 或其他 JavaScript 项目中条件性地合并和切换 CSS 类名。这个库通常用来简化根据组件的状态或属性决定元素类名的过程。 下面是 classNames 几种常见的使用方式&#xff1a; 基础用法 classNames(foo, bar…

ffmpeg批量转换wav为mp3

1、新建一个txt文件&#xff0c;并复制如下代码进入&#xff0c;然后保存。 echo off & titlecd /d %~dp0for %%a in (*.wav) do (ffmpeg -i "%%~sa" -y -acodec libmp3lame -aq 0 "%%~na.mp3")pause 2、把文件后缀修改为bat 。 3、把后缀为bat的文…

【算法题】54. 螺旋矩阵

题目 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例 2&#xff1a; 输入&#xff1a;matrix …

纯c实现顺序表 数据结构大全

我们已经知道数组是连续的内存地址&#xff0c;顺序表是由数组为基础的一种数据结构&#xff0c;拥有比数组更多的功能&#xff0c;在概念上属于线性结构&#xff0c;跟链表不同的是&#xff0c;顺序表在物理结构上也是线性的 什么是数据结构&#xff1f; 当我们想要使⽤⼤量使…

云计算平台建设总体技术方案详细参考

第1章. 基本情况 1.1. 项目名称 XX 公司 XX 云计算平台工程。 1.2. 业主公司 XX 公司。 1.3. 项目背景 1.3.1. XX 技术发展方向 XX&#xff0c;即运用计算机、网络和通信等现代信息技术手段&#xff0c;实现政府组织结构和工作流程的优化重组&#xff0c;超越时间、空间…

学习Vue的插槽总结

今天学习了Vue的插槽&#xff0c;在这之前学习使用组件的使用还没有试过在父组件中给子组件插入html结构&#xff0c;今天学习的插槽正是拿来实现这一功能的&#xff0c;这也是一种组件中通信的方式&#xff0c;首先插槽分为三类&#xff1a;默认插槽、具名插槽、作用域插槽。接…

开源28181协议视频平台搭建流程

最近项目中用到流媒体平台&#xff0c;java平台负责信令部分&#xff0c;c平台负责流媒体处理&#xff0c;找了评分比较好的开源项目 https://gitee.com/pan648540858/wvp-GB28181-pro 流媒体服务基于 c写的 https://github.com/ZLMediaKit/ZLMediaKit 说明文档&#xff1a;h…

Visual Studio Code常用设置

此处用于记录下本人所使用 VScode 的使用习惯。其中主要包括&#xff1a;界面&#xff0c;主题&#xff0c;光标&#xff0c;文件保存等选项。 VSCode 用户区设置 相关介绍命令行方式进行配置可视化组件方式进行配置 更新 相关介绍 基本原理&#xff1a; Visual Studio Code 会…

【电子通识】各国电源插头标准和电压标准

在使用仪器时&#xff0c;通常会在使用之前去看下规格书。比如安装指南、快速使用指南等等来提取我们需要的信息。 一般大型的仪器供应商会卖往不同的国家&#xff0c;所以都会配置多种电源线。如下所示规格书中对仪器的电源线种类进行了说明。其中有中国、美国、加拿大、日本…

华为机试真题实战应用【赛题代码篇】-整理扑克牌(附Java、C++和python代码)

目录 问题描述 思路解析 思路1 思路2 代码实现 python 代码2

设计模式入门

0. 类图 1. 设计原则 1.单一职责原则&#xff1a;每个类只有一个功能 2.开放封闭原则&#xff1a;模块和函数应该对扩展开放(对提供方)&#xff0c;对修改关闭(对使用方) 3.里氏代换原则&#xff1a;子类拥有父类的所有方法和属性&#xff0c;从而可以减少创建类的工作量 4.依…

20240115在ubuntu20.04.6下给GTX1080M显卡安装驱动程序和CUDA

20240115在ubuntu20.04.6下给GTX1080M显卡安装驱动程序和CUDA 2024/1/15 18:05 百度搜索&#xff1a;ubuntu gtx1080m cuda https://blog.csdn.net/wb4916/article/details/129462103 20230311给Ubuntu18.04下的GTX1080M安装驱动 https://www.cnblogs.com/djiankuo/p/5886605.h…