9 Python编程语言与测试框架 - 软件测试

软件测试所有内容笔记正在陆续更新中,笔记已经在本地记录,全部为自己手动记录的笔记及总结,正在开始更新中,后续会逐步更新并完善到 软件测试学习内容总结 专栏。本节内容:Python编程语言与测试框架文章目录1. python标准库Python 标准库常见模块2. python多线程处理什么是进程什么是线程Python与线程两种线程管理3. python 常用的第三方库pytestrequests4. pip依赖管理与虚拟环境pip 介绍虚拟环境5. python unittest测试框架1. 单元测试.
摘要由CSDN通过智能技术生成

软件测试所有内容笔记正在陆续更新中,笔记已经在本地记录,全部为自己手动记录的笔记及总结,正在开始更新中,后续会逐步更新并完善到 软件测试学习内容总结 专栏。
本节内容:Python编程语言与测试框架

1. python标准库

  • Python 标准库常见模块

    • 操作系统相关:os
    • 时间与日期:time,datetime
    • 科学计算:math
    • 网络请求:urllib

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’)
    1. response.read().decode(‘utf-8’)
    1. response.status
    1. 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

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源

虚拟环境

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ÿ

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值