内部UI自动化测试培训之python基础
这个文档的由来是公司内部UI自动化测试培训的资料。部门为了减少测试工作量,准备做UI自动化测试。我写python,其他同事都是java,所以python基础和UI自动化测试selenium的培训就由我来完成。
完整教程包括4篇内容,本篇是python的基础内容,高手请跳过。虽然是基础,但是可以看做是一个python的微型教程,如果想了解python,简单上手尝试,这个教程适合。
UI 自动化测试相关内容:
前言
Python 是一门上手非常快的语言,学习python这门编程语言达到能够正常使用的程度,需要掌握的点包括:
- 语言基础特性
- 数据类型
- 流程控制
- 函数调用
- 面向对象
- 模块与包
下面从这6个方面来快速熟悉python语言
语言基础特性
解释性语言
程序执行原理:
计算机不能直接理解高级语言,只能理解和运行机器语言,所以必须要把高级语言翻译成机器语言,计算机才能运行高级语言所编写的程序。
编译型:
程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。
编译型语言:
C/C++、Golang。典型的就是C语言可以编译后生成可执行文件,之后无需再次编译,直接运行可执行文件即可。
解释型:
程序不需要编译,程序在运行时才翻译成机器语言,每执行一次都要翻译一次。因此效率比较低。
解释型语言:
C#、PHP、JavaScript、Perl、Python、Ruby 等等
Python 是一个解释性语言,Python解释器首先会将python程序编译成中间文件 .pyc 文件,然后解释器执行pyc文件。
优缺点
- WEB开发——最火的Python web框架Django, 支持异步高并发的Tornado框架,短小精悍的flask,bottle。
- 网络编程——支持高并发的Twisted网络框架, py3引入的asyncio使异步编程变的非常简单
- 爬虫——爬虫领域,Python几乎是霸主地位,Scrapy\Request\BeautifuSoap\urllib等,想爬啥就爬啥
- 云计算——目前最火最知名的云计算框架就是OpenStack,Python现在的火,很大一部分就是因为云计算
- 人工智能—— Python 是目前公认的人工智能的必备语言,pytorch和tensorflow等框架都是用python编写
- 自动化运维 devops ——问问中国的每个运维人员,运维人员必须会的语言是什么?10个人相信会给你一个相同的答案,它的名字叫Python
- 金融分析——金融行业写的好多分析程序、高频交易软件就是用的Python。到目前Python是金融分析、量化交易领域里用的最多的语言
- 科学运算—— 97年开始,NASA就在大量使用Python在进行各种复杂的科学运算,随着NumPy, SciPy, Matplotlib, Enthought librarys等众多程序库的开发,使的Python越来越适合于做科学计算、绘制高质量的2D和3D图像。和科学计算领域最流行的商业软件Matlab相比,Python是一门通用的程序设计语言,比Matlab所采用的脚本语言的应用范围更广泛
性能问题
python最大的问题就是性能问题,可以参考如下性能测试。
但是python并不是不能支持大型项目。比如facebook的很多大型后台服务都是python项目。
Twitter 劲敌 Threads,“魔改”了哪些 Python 技术栈?
新手小提示:如果在此之前没有接触过python编程,想要尝试复现本教程中的示例,可以通过如下几步:
- 找到一个linux服务器
- 在命令行中输出python3,进入python解释器中
- 逐条输入代码
数据类型
Python 有数据类型,但是变量定义时不需要指定变量的类型。格式:
变量 = 数值
对比java,C++等需要指明变量的类型
int d = 3
数值
整型:可以存储无限大的数字,理论上没有上限
>>> score = 100
>>> print(score)
100
浮点型:没有精度限制
>>> pi = 3.1415926
>>> print(pi)
3.1415926
布尔:用True和False表示布尔类型。True可以当成数值1来用,False可以当成0来用
>>> is_vip = True
>>>
>>> print(is_vip)
True
>>> has_error = False
>>> has_error == 0
True
复数:一个实数和一个虚数组合构成,表示为:x+yj
>>> a = 100+50j
>>> print(a)
(100+50j)
字符串
string = "hello world"
访问:使用下标直接访问字符串中的特定字符。可以正索引,也可以负索引
string = "hello world"
>>> string = "hello world"
>>> string[1]
'e'
>>> string[-1]
'd'
>>>
切片:所谓切片就是获取序列的一个连续子序列。字符串切片语法是:[start:end],取到的范围是下标start开始到end-1,也就是所谓的左闭右开
>>> string[1:4]
'ell'
>>> string[1:]
'ello world'
>>> string[1:100]
'ello world'
>>>
列表
列表是一种容器类型,类似于数组,按照顺序排序元素。但是存入的元素没有数据类型的约束,可以是任意类型。
特点:无限长度、可以存入任意类型的数据结构
创建:使用中括号创建列表
>>> arr = [1, 2, 3, 4, 5]
>>> arr
[1, 2, 3, 4, 5]
访问:可以索引访问,支持切片,支持负索引,支持按步长访问
# 索引
>>> arr
[1, 2, 3, 4, 5]
>>> arr[1]
2
# 切片
>>> arr[1: -1]
[2, 3, 4]
>>>
>>> arr[:3]
[1, 2, 3]
>>>
# 按步长访问,访问下标0-8的元素,步长为2
>>> arr = [1,2,3,4,5,6,7,8,9]
>>> arr[0:9:2]
[1, 3, 5, 7, 9]
添加:append 在尾部追加 ;insert 在任意下标插入数据
>>> arr
[1, 2, 3, 4, 5]
>>> arr.append(10)
>>> arr
[1, 2, 3, 4, 5, 10]
>>>
>>> arr.insert(0, -1)
>>> arr
[-1, 1, 2, 3, 4, 5, 10]
删除:pop()删除队列末尾; pop(index)删除指定下标; remove(value) 删除指定值
>>> arr
[-1, 1, 2, 3, 4, 5, 10]
>>> arr.pop()
10
>>> arr.pop(0)
-1
>>> arr.remove(5)
>>> arr
[1, 2, 3, 4]
元组
元组和列表类似,但是元组是不可修改,删除元素。
特点:不可删除和修改元素,是不可变序列
创建:创建一个元组有两种方法,分别是小括号和tuple关键字
>>> num = (10, 20, 30, 40, 50)
>>> num
(10, 20, 30, 40, 50)
>>> type(num)
<class 'tuple'>
>>>
>>> list1 = ["python", "java", "C++"]
>>> tup1 = tuple(list1)
>>> tup1
('python', 'java', 'C++')
>>>
访问:可以通过下标和切片的方式访问元组
>>> num
(10, 20, 30, 40, 50)
>>> num[1]
20
>>> num[1:10]
(20, 30, 40, 50)
>>>
字典
字典也是一种容器类型,java中叫hashmap,是由键值对组成的数据结构。
特点:访问时间复杂度为常数
创建:通过大括号和dict关键字都可以创建字典
>>> p_dict = {"name": "xiaozhang", "age": 18, "finish_course": False}
>>>
>>> p_dict
{'name': 'xiaozhang', 'age': 18, 'finish_course': False}
访问:字典通过key来访问value,一共有两种访问方式[]和get方法。
>>> p_dict["name"]
'xiaozhang'
# 取不到值会报错
>>> p_dict["height"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'height'
# 取不到值不会报错
>>> p_dict.get("age")
18
>>> p_dict.get("height")
>>> p_dict.get("height", 0)
0
添加:两种添加方法,增加keyvalue键值对和更新另一个字典
>>> p_dict["height"] = 180
>>>
>>> p_dict.update({"phone": 12306})
>>>
>>>
>>> p_dict
{'name': 'xiaozhang', 'age': 18, 'finish_course': False, 'height': 180, 'phone': 12306}
删除:两种删除方法,pop删除指定key,popitem()随机删除一个
>>> p_dict.pop("age")
18
>>> p_dict.popitem()
('phone', 12306)
>>>
集合
python中的集合,和数学中的集合概念一样,用来保存不重复的元素,即集合中的元素都是唯一的,互不相同。
特点:元素不重复,只能存储不可变的数据类型,包括整形、浮点型、字符串、元组,无法存储列表、字典、集合这些可变的数据类型。
创建:
从形式上看,和字典类似,Python 集合会将所有元素放在一对大括号 {} 中,相邻元素之间用“,”分隔,如下所示:
>>> set1 = {1,2,3,4,5}
>>> set1
{1, 2, 3, 4, 5}
>>> type(set1)
<class 'set'>
访问:集合不支持单个元素访问,可以遍历全部
添加:使用add添加元素
>>> set1.add(100)
>>> set1
{1, 2, 3, 4, 5, 100}
删除:使用remove删除指定值,如果不存在该值会抛出异常
>>> set1.remove(4)
>>> set1
{1, 2, 3, 5, 100}
集合操作:集合支持数学意义上的集合的操作,包括:两个集合取交集、差集、并集、补集
# 差集
>>> set1 = {1, 2, 3}
>>> set2 = {1, 4, 5}
>>> set1 - set2
{2, 3}
# 并集
>>> set1 | set2
{1, 2, 3, 4, 5}
# 补集
>>> set1 ^ set2
{2, 3, 4, 5}
# 交集
>>> set1 & set2
{1}
流程控制
条件判断
python使用if关键字做条件判断,语法特点:
- 使用缩进对齐来确定代码块
- 使用冒号标志结束
>>> age = 20
>>> if age >= 18:
... print("成年人")
... else:
... print("未成年人")
...
成年人
循环语句
python只有两种循环语法,分别是for循环和while循环,没有do while这种语法
for循环
python中的for循环使用in这个关键字,从待循环的容器中取出每一个元素,赋值给循环标识i
>>> ikun = ["鸡", "你", "太美"]
>>> for i in ikun:
... print(i)
...
鸡
你
太美
java for循环和python for循环对比
public class Test {
public static void main(String[] args) {
for(int x = 0; x < 20; x = x+1) {
System.out.print(x);
}
}
}
>>> print(list(range(20)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
for i in range(20):
print(i)
java for循环是让变量x不断自增,直到大于20退出循环,python for循环是range(20)生成一个从0到19的容器,每次取出一个元素赋值给i。
while
while 遇到条件不满足则退出,和其他语言类似
>>> index = 10
>>> while index > 0:
... print(index)
... index = index - 1
...
10
9
8
7
6
5
4
3
2
1
函数调用
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。
函数定义
def get_vip(score):
if not isinstance(score, int):
print("输入不是数字")
return
if score >= 60:
return True
else:
return False
is_vip = get_vip(88)
print(is_vip)
>>>
True
定义函数通过def关键字开始,冒号结束。函数代码块以统一缩进标识。
函数返回
python中函数返回有一个特性:函数可以返回多个值,如:
def get_vip(score):
is_vip = False
is_super_vip = False
if score > 60:
is_vip = True
if score > 90:
is_super_vip = True
return is_vip, is_super_vip
vip, super_vip = get_vip(88)
>>> vip
True
>>> super_vip
False
如上示例返回两个值,函数调用时也需要用两个值接收,否则会抛出异常。
面向对象
类和实例
使用关键字class定义,class后面紧接着是类名。类名通常是大驼峰命名
class Person(object):
pass
object 是Student继承的类,如果没有继承任何类可以省略括号以及里面的内容。
实例
类是抽象的模板,比如Person类,而实例是根据类创建出来的一个具体的对象。python不需要任何关键字就能实例化一个对象,使用函数调用的方法就能创建一个实例。
one_person = Person()
属性
python面向对象中,变量叫做属性
class Person:
def __init__(self, name, job):
self.name = name
self.job = job
name = "马保国"
job = "浑元形意太极门掌门人"
p = Person(name, job)
print(f"朋友们好啊, 我是{p.job}{p.name}")
方法
python面向对象中,函数叫做方法
class Person:
def __init__(self, name, job):
self.name = name
self.job = job
def say(self):
print("这两个年轻人不讲武德!来,骗,来偷袭我69岁的老同志。我劝这位年轻人,耗子尾汁")
name = "马保国"
job = "浑元形意太极门掌门人"
p = Person(name, job)
p.say()
构造方法
在python的类中有一个特殊的方法用于实例创建时初始化,就是构造方法。
类就如同一个模板,通过类创建的实例肯定是千差万别的。实例在创建时可以传入属于自己的属性,在python中就是通过这个构造方法__init__来实现。
class Person:
def __init__(self, name, job):
self.name = name
self.job = job
在创建实例时传入name 和 job 两个参数
name = "马保国"
job = "浑元形意太极门掌门人"
p = Person(name, job)
后续整个实例都可以使用该初始化的参数
class Person:
def __init__(self, name, job):
self.name = name
self.job = job
def introduce(self):
print(f"朋友们好啊, 我是{self.job}{self.name}")
对比java中也有构造方法
public class worker{
public String name;
public int age;
public Worker(String name, int age){
this.name = name;
this.age = age;
}
public String toString() {
return "大家好!我是新来的员工,我叫"+name+",今年"+age+"岁。";
}
}
模块与包
模块
python中代码是通过模块和包管理的。
一个 py 文件就是一个模块。
包
包是保存几个模块的文件夹,包中通常包含几个py文件和一个__init__.py的特殊文件。__init__.py
用于标识该文件夹是一个包。
Python 网络请求最常用的库requests目录赏析,每一个包的目录下面都有一个__init__.py文件。
安装第三方包
安装第三方包,炫酷进度条。
pip install alive-progress
from alive_progress.styles import showtime # 使用from import关键字导入模块
showtime()
python基础知识介绍到这里就结束了,UI自动化测试Selenium请参考另一篇 selenium 开源UI测试工具
内部UI自动化测试培训之python基础的更多相关文章
- Python自动化测试面试题-Python基础篇
目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...
- 关于去哪儿网的UI自动化测试脚本(Python实现)
UI自动化测试Qunar机票搜索场景访问Qunar机票首页http://flight.qunar.com,选择“单程”,输入出发.到达城市,选择today+7日后的日期,点“搜索”,跳转到机票单程搜索 ...
- Python+appium+unittest UI自动化测试
什么是UI自动化 自动化分层 单元自动化测试,指对软件中最小可测试单元进行检查和验证,一般需要借助单元测试框架,如java的JUnit,python的unittest等 接口自动化测试,主要检查验证模 ...
- UI自动化测试框架(项目实战)python、Selenium(日志、邮件、pageobject)
其实百度UI自动化测试框架,会出来很多相关的信息,不过就没有找到纯项目的,无法拿来使用的:所以我最近就写了一个简单,不过可以拿来在真正项目中可以使用的测试框架. 项目的地址:https://githu ...
- 【python+selenium自动化】图像识别技术在UI自动化测试中的实际运用
引言: 目前在图像识别方面的自动化测试框架有很多,其中比较有名的是airtest,主要做手机端的游戏自动化测试(http://airtest.netease.com/) 因为没有实际把airtest运 ...
- python UI自动化测试
为了减小维护成本: 1.UI自动化测试需要有较为稳定的环境 2.代码设计合理,那么我们就需要面向对象的设计一个框架,将重复的代码模块化 一.首先总结一下 UI自动化大概要哪些模块 1.config(配 ...
- appium+python 【Mac】UI自动化测试封装框架流程简介 <一>
为了多人之间更方便的协作,那么框架本身的结构和编写方式将变得很重要,因此每个团队都有适合自己的框架.如下本人对APP的UI自动化测试的框架进行进行了简单的汇总.主要目的是为了让团队中的其余人员接手写脚 ...
- Python UI自动化测试实操
本UI 自动化框架主要的实验的目的是:完成了登录页面的自动化登录与打开会员中心的页面这一自动化的过程. 废话不多说,直接上代码截图: 我们首先来看看整个工程的目录结构,这样以便于了解项目的调用关系: ...
- selenium2自动化测试实战--基于Python语言
自动化测试基础 一. 软件测试分类 1.1 根据项目流程阶段划分软件测试 1.1.1 单元测试 单元测试(或模块测试)是对程序中的单个子程序或具有独立功能的代码段进行测试的过程. 1.1.2 集成测试 ...
- Python基础+Pythonweb+Python扩展+Python选修四大专题 超强麦子学院Python35G视频教程
[保持在百度网盘中的, 可以在观看,嘿嘿 内容有点多,要想下载, 回复后就可以查看下载地址,资源收集不易,请好好珍惜] 下载地址:http://www.fu83.cc/ 感觉文章好,可以小手一抖 -- ...
随机推荐
- MySQL 列操作记录
在 MySQL 中,你可以使用多种命令和语句来执行列操作,包括添加.修改.删除列等.以下是一些与列操作相关的常用 MySQL 命令和语句: 1. 添加列: 添加新列到表格中: ALTER TABLE ...
- 深度学习应用篇-计算机视觉-图像分类[3]:ResNeXt、Res2Net、Swin Transformer、Vision Transformer等模型结构、实现、模型特点详细介绍
深度学习应用篇-计算机视觉-图像分类[3]:ResNeXt.Res2Net.Swin Transformer.Vision Transformer等模型结构.实现.模型特点详细介绍 1.ResNet ...
- Redis 数据库配置与应用
Redis 是一个key-value存储系统.Redis是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. ...
- CE修改器入门:运用代码注入
从本关开始,各位会初步接触到CE的反汇编功能,这也是CE最强大的功能之一.在第6关的时候我们说到指针的找法,用基址定位动态地址.但这一关不用指针也可以进行修改,即使对方是动态地址,且功能更加强大. 代 ...
- Object.getOwnPropertyDescriptor()属性
console.log(Object.getOwnPropertyDescriptor(person,'a')); // writable: 是否可以修改 // value: 对象值 // confi ...
- 分享四个实用的vue自定义指令
v-drag 需求:鼠标拖动元素 思路: 元素偏移量 = 鼠标滑动后的坐标 - 鼠标初始点击元素时的坐标 + 初始点击时元素距离可视区域的top.left 将可视区域作为边界,限制在可视区域里面拖拽 ...
- 使用Docker单机部署Ceph
安装Docker过程参考:https://www.cnblogs.com/hackyo/p/9280042.html 1. 创建Ceph专用网络 sudo docker network create ...
- Docker从认识到实践再到底层原理(二-1)|容器技术发展史+虚拟化容器概念和简介
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总 然后就是博主最近最花时间的一 ...
- 基于Wireshark的ARP协议分析和IP报文、ICMP报文的分析|网络数据抓包|课程设计|traceroute|ping|
前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总https://blog.cs ...
- Golang中make和new的区别
1. 相同点 都是内建函数,都是在堆上分配内存,都需要传递类型参数 2. 不同点 传递的参数不一样,new函数只接收一个参数,make函数可以接收一个以上的参数 package main import ...