python123测试_【测码学院】python自动化测试学习-自动化测试模型
测码学院 python自动化测试学习
前言
自动化测试过程中,会通过模块的操作先后顺序进行代码编写,但对于整体性来说,需要先构建一个框架或者模型,便于后期对代码的维护,减少代码开发量以及维护成本。目前自动化模型有:线性测试、模块化、数据驱动等。
模型分类
1.线性测试
线性测试就是每一个脚本都能单独运行,不依赖其他脚本;比如:发一封邮件,需要先登录,之后填写邮件,最后发送邮件,退出。
我们可以通过实例来看一下,以dvwa的登录为例:
test_loginWeb.py中的代码如下:
from selenium import webdriver
from time import sleep
import pytest
def test_CI():
driver=webdriver.Firefox()
#登录网址
driver.get("http://10.5.1.247/dvwa/login.php")
#输入用户名
driver.find_element_by_name("username").send_keys("admin")
#输入密码
driver.find_element_by_name("password").send_keys("password")
#点击登录
driver.find_element_by_name("Login").click()
sleep(1)
driver.find_element_by_link_text("Command Injection").click()
sleep(1)
driver.find_element_by_name("ip").send_keys("127.0.0.1")
sleep(1)
driver.find_element_by_name("Submit").click()
sleep(3)
driver.quit()
def test_FUP():
driver=webdriver.Firefox()
driver.get("http://10.5.1.247/dvwa/login.php")
driver.find_element_by_name("username").send_keys("admin")
driver.find_element_by_name("password").send_keys("password")
driver.find_element_by_name("Login").click()
sleep(1)
driver.find_element_by_link_text("File Upload").click()
sleep(3)
driver.quit()
if __name__ == '__main__':
pytest.main(["-sq","test_loginWeb.py"])
执行结果:
"E:\Program Files\myPytest\venv\Scripts\python.exe" "E:/Program Files/myPytest/test_case/test_loginWeb.py"
..
2 passed in 20.87s
Process finished with exit code 0
点击Command Injection,并输入ip地址:
小结:
从上面的两个方法可以看出,我们在登陆时,需要重复两遍的登录操作,都是从输入网址开始,直到登录后,再进行其他操作。但如果需要修改登录账号、密码的话,就要改两个地方,造成了代码的重复编写和修改,如果涉及的脚本比较多,则需要对每个脚本的进行修改,维护成本较大。
2.模块化测试模型
我们会发现在线性测试模型中,有很多内容是重复的,于是我们可以考虑把重复的代码写成一个公共的模块,其他函数主要去调用即可,这样就可以减少代码的重复率。如果想要修改,只要修改一个公共模块,则相对比较容易。
conftest.py中的代码:
import pytest
import os
from selenium import webdriver
from time import sleep
@pytest.fixture
def login():
'''打开浏览器'''
global driver
driver = webdriver.Firefox()
driver.get("http://10.5.1.247/dvwa/login.php")
driver.find_element_by_name("username").send_keys("admin")
driver.find_element_by_name("password").send_keys("password")
driver.find_element_by_name("Login").click()
sleep(1)
print('\n打开浏览器!')
return driver
test_loginWeb.py中的代码:
from selenium import webdriver
from time import sleep
import pytest
def test_CI(login):
global driver
driver=login
driver.find_element_by_link_text("Command Injection").click()
sleep(1)
driver.find_element_by_name("ip").send_keys("127.0.0.1")
sleep(1)
driver.find_element_by_name("Submit").click()
sleep(3)
driver.quit()
sleep(2)
def test_FUP(login):
driver=login
driver.find_element_by_link_text("File Upload").click()
sleep(3)
driver.quit()
if __name__ == '__main__':
pytest.main(["-sq","test_loginWeb.py"])
执行结果:
"E:\Program Files\myPytest\venv\Scripts\python.exe" "E:/Program Files/myPytest/test_case/test_loginWeb.py"
打开浏览器!
.
打开浏览器!
.
2 passed in 25.88s
Process finished with exit code 0
点击Command Injection,并输入ip地址:
点击File Upload:
小结:
模块化测试模型,有两个优点:一个是可以提高开发效率,不用重复地编写相同的脚本,直接调用之前写好的模块脚本就可以了;另一个是可以方便对代码的维护,如果公共模块需要变化,我们只要改公共模块代码就可以,其他代码就不用修改。
3.数据驱动测试模型
数据驱动算是对模块化模型的一个补充,数据的更新驱动自动化的执行,从而引起测试结果的改变。数据驱动的含义其实就是参数化,通过数据和代码分离,不影响代码的执行,又能够通过输入数据的不同进而影响输出结果。
login.csv中的数据:
admin,admin
admin,password
admin,123
test_loginWeb.py中的代码:
from selenium import webdriver
from time import sleep
import pytest
import csv
def test_login():
global driver
driver = webdriver.Firefox()
#打开网址
driver.get("http://10.5.1.247/dvwa/login.php")
#读取文件中的数据
user=open('data\\data.csv','rt',encoding='utf-8')
datas=csv.reader(user)
#循环数据不同的用户和密码
for data in datas:
driver.find_element_by_name("username").send_keys(data[0])
sleep(1)
driver.find_element_by_name("password").send_keys(data[1])
sleep(1)
driver.find_element_by_name("Login").click()
sleep(2)
driver.quit()
if __name__ == '__main__':
pytest.main(["-sq","test_loginWeb.py"])
执行结果:
"E:\Program Files\myPytest\venv\Scripts\python.exe" "E:/Program Files/myPytest/test_case/test_loginWeb.py".
1 passed in 17.74s
Process finished with exit code 0
小结:
当我们在读取一组数据时,不管是json、csv、txt 等文件格式,只要从文件中读取数据,即实现了数据与脚本的分离,实现了参数化。如果数据需要变更,只需要更新文件中的数据即可,无需对脚本代码进行更改,保证了代码的稳定性,也提高了代码的维护成本。
python123测试_【测码学院】python自动化测试学习-自动化测试模型相关推荐
- python自动化流程概念_【测码学院】python自动化测试-自动化指的是什么
测码学院 python自动化测试-自动化指的是什么 有很多人做了很长时间的自动化但却连自动化的概念都不清楚,这样的人也是很悲哀,做这样的职业,却连最基本的概念都不清楚.我给大家列举出来如下: 自动化 ...
- 字节码学院全栈学习笔记
今天正式加入字节码学院,努力学习Java全栈,争取在6个月内称为一个了解软件行业的人,本人在这里立铁为证: 搭建vue 组件化开发环境时,需要安装node.js =================== ...
- 怎么自学python自动化测试-学习自动化测试,如何学习Python语言?
一.Python常用领域Python用于简单脚本编程,如编写2048小游戏或12306的自动抢票软件: Python用于系统编程,如开发系统应用: Python用于开发网络爬虫: 有资料奉上,可以看看 ...
- monkey测试_爱码小士丨 APP稳定性测试(附视频详解)
在实际的测试过程中,主要是对系统的功能来进行测试,用于校验功能的正确性 还需要考虑到系统在未修改的状态下,是否能够稳定运行,即崩溃.闪退.重启.系统异常等等等地情况 在APP中,稳定性测试一般是交由M ...
- python开发gui网络ping测试_网络工程师使用python实践2_ping测试
背景介绍 在工作中,我们常常会遇到需要进行网络连通性测试,比如:网络割接后,需要ping大量的IP地址,并记录ping的结果.为了避免这种机械的工作,用python写了一个可以自动进行ping测试,并 ...
- python网页编程测试_李亚涛:python编写友情链接检测工具
原标题:李亚涛:python编写友情链接检测工具 友情链接是网站外链的非常重要的来源,作为一个网站运营推广人员,需要定期对网站的友链进行更新与检查,如果有人下掉你的链接,这样你可以及时的检测并清除掉. ...
- python手写板,机器语言之手写识别_源码时代Python公开课|Python培训
课程介绍 当我们在手写设备(例如我们输入法中的手写模式),使用手写的文字,我们计算机是如何快速准确的识别出来的?每个人,甚至是同一个人,每次手写的字都不是完全一样,计算机不是人,它是怎么做到的呢?难道 ...
- python极客学院爬虫_极客学院Python文本爬虫
# -*- coding: utf-8 -*- import re old_url = 'http://www.jikexueyuan.com/course/android/?pageNum=2' t ...
- 计算机毕业设计(附源码)python在线学习交流平台
项目运行 环境配置: Pychram社区版+ python3.7.7 + Mysql5.7 + HBuilderX+list pip+Navicat11+Django+nodejs. 项目技术: dj ...
最新文章
- Android socket 编程 实现消息推送
- Tungsten Fabric SDN — Device Manager
- Jenkins之邮件通知
- html运行c代码大全,html特效代码大全
- StoryBoard概览
- 在SPA应用中利用JWT进行身份验证
- JSch连接不上Linux服务器,windows 下 java程序jsch连接远程linux服务器执行shell命令
- Swift来了,是不是能够入手IOS开发了?
- Python字符串isdigit()
- linux分区修复命令行,Linux技巧:使用Fsck命令修复损坏的分区
- pygame中的mixer(含music)模块
- 无线路由当交换机的设置方法
- vgs、vgdisplay、vgscan 查看卷组
- 新华三防火墙简单配置安全域
- 判断Linux环境是否装了NCCL,安装cuDNN和NCCL指南
- 微信小程序做图片压缩
- 微信锁屏密码怎么设置
- python 数据挖掘_Python数据挖掘框架scikit数据集之iris
- excel oss 上传_excel上传数据库失败
- r329开发板部署aipu模型
热门文章
- 2维FFT算法实现——基于GPU的基2快速二维傅里叶变换
- GDC 2012]Epic Games谈在智能手机上制作和台式游戏机同等级的图形游戏的经验
- Unreal、CryEngine、Gamebryo引擎介绍
- Hyper Text Transfer Protocol(超文本传输协议)
- pandas.Series.rank用法详解
- hbase_学习_01_HBase环境搭建(单机)
- 负载均衡原理剖析与实践:负载均衡第一篇-介绍篇
- 详解数字电视机顶盒的功能技术与应用3
- java页面要素_Web前端入门技术之网页制作三要素
- 设计一个处理两种类型地址的地址簿程序_短信平台的API接口都有哪些类型?