测码学院  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自动化测试学习-自动化测试模型相关推荐

  1. python自动化流程概念_【测码学院】python自动化测试-自动化指的是什么

    测码学院  python自动化测试-自动化指的是什么 有很多人做了很长时间的自动化但却连自动化的概念都不清楚,这样的人也是很悲哀,做这样的职业,却连最基本的概念都不清楚.我给大家列举出来如下: 自动化 ...

  2. 字节码学院全栈学习笔记

    今天正式加入字节码学院,努力学习Java全栈,争取在6个月内称为一个了解软件行业的人,本人在这里立铁为证: 搭建vue 组件化开发环境时,需要安装node.js =================== ...

  3. 怎么自学python自动化测试-学习自动化测试,如何学习Python语言?

    一.Python常用领域Python用于简单脚本编程,如编写2048小游戏或12306的自动抢票软件: Python用于系统编程,如开发系统应用: Python用于开发网络爬虫: 有资料奉上,可以看看 ...

  4. monkey测试_爱码小士丨 APP稳定性测试(附视频详解)

    在实际的测试过程中,主要是对系统的功能来进行测试,用于校验功能的正确性 还需要考虑到系统在未修改的状态下,是否能够稳定运行,即崩溃.闪退.重启.系统异常等等等地情况 在APP中,稳定性测试一般是交由M ...

  5. python开发gui网络ping测试_网络工程师使用python实践2_ping测试

    背景介绍 在工作中,我们常常会遇到需要进行网络连通性测试,比如:网络割接后,需要ping大量的IP地址,并记录ping的结果.为了避免这种机械的工作,用python写了一个可以自动进行ping测试,并 ...

  6. python网页编程测试_李亚涛:python编写友情链接检测工具

    原标题:李亚涛:python编写友情链接检测工具 友情链接是网站外链的非常重要的来源,作为一个网站运营推广人员,需要定期对网站的友链进行更新与检查,如果有人下掉你的链接,这样你可以及时的检测并清除掉. ...

  7. python手写板,机器语言之手写识别_源码时代Python公开课|Python培训

    课程介绍 当我们在手写设备(例如我们输入法中的手写模式),使用手写的文字,我们计算机是如何快速准确的识别出来的?每个人,甚至是同一个人,每次手写的字都不是完全一样,计算机不是人,它是怎么做到的呢?难道 ...

  8. python极客学院爬虫_极客学院Python文本爬虫

    # -*- coding: utf-8 -*- import re old_url = 'http://www.jikexueyuan.com/course/android/?pageNum=2' t ...

  9. 计算机毕业设计(附源码)python在线学习交流平台

    项目运行 环境配置: Pychram社区版+ python3.7.7 + Mysql5.7 + HBuilderX+list pip+Navicat11+Django+nodejs. 项目技术: dj ...

最新文章

  1. Android socket 编程 实现消息推送
  2. Tungsten Fabric SDN — Device Manager
  3. Jenkins之邮件通知
  4. html运行c代码大全,html特效代码大全
  5. StoryBoard概览
  6. 在SPA应用中利用JWT进行身份验证
  7. JSch连接不上Linux服务器,windows 下 java程序jsch连接远程linux服务器执行shell命令
  8. Swift来了,是不是能够入手IOS开发了?
  9. Python字符串isdigit()
  10. linux分区修复命令行,Linux技巧:使用Fsck命令修复损坏的分区
  11. pygame中的mixer(含music)模块
  12. 无线路由当交换机的设置方法
  13. vgs、vgdisplay、vgscan 查看卷组
  14. 新华三防火墙简单配置安全域
  15. 判断Linux环境是否装了NCCL,安装cuDNN和NCCL指南
  16. 微信小程序做图片压缩
  17. 微信锁屏密码怎么设置
  18. python 数据挖掘_Python数据挖掘框架scikit数据集之iris
  19. excel oss 上传_excel上传数据库失败
  20. r329开发板部署aipu模型

热门文章

  1. 2维FFT算法实现——基于GPU的基2快速二维傅里叶变换
  2. GDC 2012]Epic Games谈在智能手机上制作和台式游戏机同等级的图形游戏的经验
  3. Unreal、CryEngine、Gamebryo引擎介绍
  4. Hyper Text Transfer Protocol(超文本传输协议)
  5. pandas.Series.rank用法详解
  6. hbase_学习_01_HBase环境搭建(单机)
  7. 负载均衡原理剖析与实践:负载均衡第一篇-介绍篇
  8. 详解数字电视机顶盒的功能技术与应用3
  9. java页面要素_Web前端入门技术之网页制作三要素
  10. 设计一个处理两种类型地址的地址簿程序_短信平台的API接口都有哪些类型?