软件测试所有内容笔记正在陆续更新中,笔记已经在本地记录,全部为自己手动记录的笔记及总结,正在开始更新中,后续会逐步更新并完善到
软件测试学习内容总结
专栏。
本节内容:Python编程语言与测试框架
文章目录
1. python标准库
os 模块
- os模块主要是对文件,目录的操作
- 常用方法:
- os.mkdir() 创建文件
- os.removedirs() 删除文件
- os.getcwd() 获取当前目录
- os.path.exists(dir or file) 判断文件或者目录是否存在
import os
os.mkdir('11') # 创建文件
os.removedirs('11') # 删除文件
print(os.listdir('./')) # 以列表形式列出当前路径中的文件,目录
print(os.getcwd()) # 列出当前路径
print(os.path.exists('b')) # 判断b文件是否存在,False表示不存在
# 判断是否存在b文件,如果文件不存在,则创建文件夹
if not os.path.exists('b'):
os.mkdir('b')
# 判断b下面有没有test.txt文件,如果没有,则打开文件,写入
# if 后面为True时,才会执行下面的语句块
if not os.path.exists('b/test.txt'):
f = open('b/test.txt','w')
f.write('hello,python')
f.close()
time 模块
- 获取当前时间以及时间格式经的模块
- 导入方式
- import time
- 常用方法
- time.asctime() 国外的时间格式
- time.time() 时间戳
- time.sleep() 等待
- time.localtime() 时间戳转成时间元祖
- time.strftime() 将当前的时间戳转成带格式的时间
- 格式:time.strftime("%Y-%m-%d %H-%M-%S",time.localtime())
import time
print(time.asctime())
print(time.time())
print(time.localtime()) # 生成元祖形式
# time.struct_time(tm_year=2021, tm_mon=4, tm_mday=21, tm_hour=21, tm_min=16, tm_sec=46, tm_wday=2, tm_yday=111, tm_isdst=0)
print(time.strftime('%Y年%m月%d日 %H:%M:%S', time.localtime()))
# 获取两天前的时间
now_timestamp = time.time() # 获取当前时间戳
two_day_before = now_timestamp - 2 * 24 * 60 * 60 # 两天前时间戳
time_tuple = time.localtime(two_day_before)
print(time.strftime('%Y-%m-%d %H:%M:%S', time_tuple))
urllib 库
- python2
- import urllib2
- response=urllib2.urlopen(“http://www.baidu.com”)
- python3
- import urllib.request
- response=urllib.request.urlopen(‘http://www.baidu.com’)
- response = urllib.request.urlopen(‘http://www.baidu.com’)
-
- response.read().decode(‘utf-8’)
-
- response.status
-
- response.headers
import urllib.request
response = urllib.request.urlopen('http://www.baidu.com')
print(response)
print(response.status)
print(response.read())
print(response.headers) # 头部信息
math 库
- math.ceil(x) 返回大于等于参数x的最小整数
- math.floor(x) 返回小于等于参数x的最大整数
- math.sqrt(x) 平方根
import math
print(math.ceil(1.5))
print(math.floor(1.5))
print(math.sqrt(25))
2. python多线程处理
什么是进程
打开十个ppt就是十个进程,它们之间相互独立,都有自己的地址空间,内存,数据栈
- 进程是执行中的程序
- 拥有独立地址空间、内存、数据栈等
- 操作系统管理
- 派生(fork 或 spawn)新进程
- 进程间通信(IPC)方式共享信息
什么是线程
多线程解决数据间共享的问题,它是在进程下执行的,
比如,一个进程下可以开启十个线程,十个线程间数据共享。
多线程 运行方式是并发执行,多进程 并行执行。
并行,多进程 可以并行,比如,10个应用,它们之间是可以同时进行,在同一时刻,会有10个进程
并发, 并不是同一时刻同时执行,比如,并发10个线程,同一时刻只会有1个线程进行执行,它会对10个线程轮番执行,并发是交互的执行,而并行是同时执行。
多进程 可以同时执行,多线程不能同时执行,同一时刻只能有一个线程执行,并对多个线程轮训执行。
- 同进程下执行,并共享相同的上下文
- 线程间的信息共享和通信更加容易
- 多线程并发执行
- 需要同步原语
Python与线程
- 解释器主循环
- 主循环中只有一个控制线程在执行
- 使用全局解释器锁(GIL)
GIL保证一个线程
- 设置GIL
- 切换进一个线程去运行
- 执行下面操作之一
- 指定数量的字节码指令
- 线程主动让出控制权
- 把线程设置回睡眠状态(切换出线程)
- 解锁GIL
- 重复上述步骤
两种线程管理
- _thread:提供了基本的线程和锁
- threading:提供了更高级别、功能更全面的线程管理
- 支持同步机制
- 支持守护线程
_thread模块
_threading模块
Thread类1
Thread2
3. python 常用的第三方库
pytest
pip install pytest
requests
pip install requests
- pypi文档:https://pypi.org/project/requests/
- 官方文档:https://docs.python-requests.org/zh_CN/latest
import requests
r = requests.get('http://www.baidu.com')
print(r.status_code) # 200 响应状态码
print(r.encoding) # 'utf-8' 打印编码
r.encoding = 'utf8' # 修改编码
print(r.text) # 响应内容
4. pip依赖管理与虚拟环境
pip 介绍
- Python的标准管理库 -安装 管理不属于Python标准库的其他软件包
- Python3.4及Python2.7.9版本开始,pip直接包含在Python安装包内
- pypi托管了大量非常流行的库 www.pypi.org
- 带有PRE-RELEASE的为测试版本
- 历史版本在Release history里边
pip help
帮助pip install
安装-
pip install -U 包名
升级包 pip uninstall
卸载pip list
列出所有的包文件-
pip download
下载包 -
pip search requests
搜索包 - pip freeze 生成已安装包的列表
pip freeze > requirements.txt
pip install -r requirements.txt
安装所有必要的软件包
安装包
- pip install 包名==版本号
pip install selenium==2.39.0
- pip install -i 镜像地址 --trusted-host 镜像地址对应的host
- 举例:
pip3 install jupyter -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
- 举例:
国内的pip源
- 阿里云:https://mirrors.aliyun.com/pypi/simple/
- 清华:https://pypi.tuna.tsinghua.edu.cn/simple
- 豆瓣:http://pypi.douban.com/simple/
虚拟环境
deactivate 退出虚拟环境
https://docs.python.org/3/tutorial/venv.html
要创建一个虚拟环境,选择一个你想要放置它的目录,并以脚本的形式运行 venv 模块和目录路径:
python3 -m venv tutorial-env
tutorial-env可以改变
虚拟环境的公共目录位置是 .venv
创建了一个虚拟环境,可以激活它
在 Windows 上,运行:
tutorial-env\Scripts\activate.bat
在 Unix 或 MacOS 上,运行:
source tutorial-env/bin/activate
激活虚拟环境将改变 shell 的提示,以显示您正在使用的虚拟环境,并修改环境,以便运行 Python 将获得 Python 的特定版本和安装。
$ source ~/envs/tutorial-env/bin/activate
(tutorial-env) $ python
Python 3.5.1 (default, May 6 2016, 10:59:36)
...
>>> import sys
>>> sys.path
['', '/usr/local/lib/python35.zip', ...,
'~/envs/tutorial-env/lib/python3.5/site-packages']
你可以通过指定软件包的名称来安装软件包的最新版本:
(tutorial-env) $ python -m pip install novas
通过执行命令 venv 来创建虚拟环境:
python3 -m venv /path/to/new/virtual/environment
在 Windows 上,调用 venv 命令如下:
c:\>c:\Python35\python -m venv c:\path\to\myenv
如果你为你的 Python 安装配置了 PATH 和 PATHEXT 变量:
c:\>python -m venv c:\path\to\myenv
inherit 继承系统的所有包 不选
make available 应用于所有的项目 不选
5. python unittest测试框架
1. 单元测试概述
单元测试概述
-
什么是单元测试?
- 单元测试是开发者编写的一小段代码、用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
-
单元测试设么时候测试?
越早越好 -
单元测试由谁来负责?
单元测试可看做编码的部分,由程序员负责
单元测试需要注意
预期的输入和输出,预期结果要针对需求/设计的逻辑去写,而不是针对程序的实现去写
单元测试框架列举及国内大厂现状
- Unittest
- Python内置的标准类库。它的API跟Java的JUnit、.net的NUnit,C++的CppUnit很相似
- Pytest
- 丰富、灵活的测试框架,语法简单,可以结合allure生成一个炫酷的吃报告,现在比较主流
- Nose
- Nose是对unittest的扩展,使得python的测试更加简单。
- Mock
- unittest.mock是用来测试python的库。这个是一个标准库(出现在python3.3版本以后)
单元测试覆盖率
- 代码覆盖率也被用于自动化测试和手工测试来度量测试是否全面的指标之一,应用覆盖率的思想增强测试用例的设计
- 单元测试覆盖类型:
- 语句覆盖
- 条件覆盖
- 判断覆盖
- 路径覆盖
被测试代码片段
def demo_method(a, b, x):
if (a > 1 and b == 0):
x = x / a
if(a ==2 or x >1):
x = x + 1
return x
语句覆盖
- 语句覆盖定义
- 通过设计一定量的测试用例,保证被测试的方法每一行代码都会被执行一遍
- 运行测试用例的时候被击中的代码行即称为被覆盖的语句
- 测试用例
- 仅需要一条case,即可实现行覆盖
- a=3,b=0,x=3
- 漏洞
- and-> or --and错写为or
- 行覆盖是一个最基础的覆盖方式,但是也是最薄弱的,如果完全依赖行覆盖,会出现很严重的问题
判断覆盖
-
判断覆盖定义
- 运行测试用例的过程被击中的判定语句
-
测试用例: --(两条判断语句,设计4个测试用例 True True、False False,True False、False Trueÿ