腾讯大牛教你简单的自动化测试模型(Python+Selenium)
今天讲解简单的自动化测试模型,对于刚接触自动化测试的同学,由于没有编程语言的基础,是搞不懂代码里面的函数、封装、包以及其他概念,只是了解字符串、数组、元组及字典这种最基本的名词,更不懂自动化测试框架了。
这篇笔记来粗略记下学习自动化测试的几种模型。
1、线性测试
线性测试,顾名思义,就是一条路按照一条直线走到底。它的每个脚本都是独立的,都可以拿出来单独运行,来验证一个功能点,上两段小代码举个栗子:
打开百度主页:
# coding:utf-8
from time import sleep # 从time中引入sleep
from selenium import webdriver # 从selenium中引入webdriver
driver = webdriver.Firefox() # 选择打开的浏览器
driver.maximize_window() # 浏览器窗口最大化
driver.implicitly_wait(3) # 隐式等待
driver.get("https://www.baidu.com") # 获取URL,打开页面
driver.quit() # 退出相关浏览器
打开百度主页,并输入查找内容:
# coding:utf-8
from time import sleep # 从time中引入sleep
from selenium import webdriver # 从selenium中引入webdriver
driver = webdriver.Firefox() # 选择打开的浏览器
driver.maximize_window() # 浏览器窗口最大化
driver.implicitly_wait(3) # 隐式等待
driver.get("https://www.baidu.com") # 获取URL,打开页面
search = driver.find_element_by_id("kw") # 通过id定位搜索框
search.send_keys("selenium") # 填入"selenium"
sleep(5) # 直接等待
driver.quit() # 退出相关浏览器
以上两段代码,分别做了实现打开百度首页和打开百度首页后输入查找内容的功能,都可以单独拿出来执行。如果需要修改查找访问页面,那么我需要两段代码都需要修改。当这类独立的脚本数量多了起来,去修改这些内容花费的工作量太大,将会失去了自动化的目的。
2、模块化与类库
login.py
# coding:utf-8
from time import sleep
from selenium import webdriver # 从selenium中引入webdriver
def login_mantis():
driver = webdriver.Firefox() # 选择打开的浏览器
driver.maximize_window() # 浏览器窗口最大化
driver.implicitly_wait(3) # 隐式等待
driver.get("http://192.168.1.201/mantisbt-1.2.19/login_page.php") # 获取URL,打开页面
sleep(1) # 直接等待
username = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[2]/td[2]/input") # 通过Xpath定位获取输入账号框
username.send_keys("wuhaobo") # 输入账号
sleep(1)
password = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[3]/td[2]/input") # 通过Xpath定位获取输入密码框
password.send_keys("123456") # 输入密码
sleep(1)
login = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[6]/td/input") # 通过Xpath定位获取登录按钮
login.click() # 点击登录按钮
sleep(3)
上面的代码实现了mantis登录功能。
quit.py
# coding:utf-8
from selenium import webdriver # 从selenium中引入webdriver
def quit_mantis():
driver = webdriver.Firefox() # 选择打开的浏览器
driver.quit() # 退出相关浏览器
上面的代码实现了mantis退出功能。
do_something_in_mantis.py
# coding:utf-8
from time import sleep # 从time中引入sleep
from selenium import webdriver # 从selenium中引入webdriver
import login # 引入登录模块
import quit # 引入退出模块
login.login_mantis() # 调用登录模块
print ">>>以下操作为在登录界面后的操作"
# 需要做的操作放在登录和退出中间
print ">>>以上操作为在登录界面后的操作"
quit.quit_mantis() # 调用退出模块
上面的代码实现了调用登录模块和退出模块。
如果对软件测试、接口测试、自动化测试、面试经验交流。感兴趣可以加软件测试交流:1085991341,还会有同行一起技术交流。
通过以上代码可以发现,登录模块和退出模块可以让任意操作类脚本调用,省去了该部分代码的重复量,便于维护的同时,也加快了代码的开发速度。
3、数据驱动
直接理解成参数化输入,不同结果输出。
(1)、读取TXT方式
将存好登录的账号密码放置在两个TXT文件中:
# coding:utf-8
from time import sleep
from selenium import webdriver # 从selenium中引入webdriver
username_file = open("G:\\joker_study\\username.txt") # 打开账号文本路径
username = username_file.read() # 取出账号
password_file = open("G:\\joker_study\\password.txt") # 打开密码文本路径
password = password_file.read() # 取出密码def login_mantis_by_txt():
driver = webdriver.Firefox() # 选择打开的浏览器
driver.maximize_window() # 浏览器窗口最大化
driver.implicitly_wait(3) # 隐式等待
driver.get("http://192.168.1.201/mantisbt-1.2.19/login_page.php") # 获取URL,打开页面
sleep(1) # 直接等待
username_input = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[2]/td[2]/input") # 获取输入账号框
username_input.send_keys(username) # 输入账号
sleep(1)
password_input = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[3]/td[2]/input") # 获取输入密码框
password_input.send_keys(password) # 输入密码
sleep(1)
login_button = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[6]/td/input") # 获取登录按钮
login_button.click() # 点击登录按钮
sleep(3)
driver.quit() # 退出浏览器
上面的代码实现了从TXT文件中读出账号和密码,再传入函数中,进行登录操作。
(2)、通过函数
userconfig.py
# coding:utf-8
def username_password(username="CJOLER",password="123456"):
return username,password
login.py
# coding:utf-8
from time import sleep
from selenium import webdriver # 从selenium中引入webdriver
import userconfig # 引入userconfig文件
un, pw = userconfig.username_password()
print un, pw
def login_mantis_by_txt():
driver = webdriver.Firefox() # 选择打开的浏览器
driver.maximize_window() # 浏览器窗口最大化
driver.implicitly_wait(3) # 隐式等待
driver.get("http://192.168.1.201/mantisbt-1.2.19/login_page.php") # 获取URL,打开页面
sleep(1) # 直接等待
username_input = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[2]/td[2]/input") # 获取输入账号框
username_input.send_keys(un) # 输入账号
sleep(1)
password_input = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[3]/td[2]/input") # 获取输入密码框
password_input.send_keys(pw) # 输入密码
sleep(1)
login_button = driver.find_element_by_xpath("html/body/div[3]/form/table/tbody/tr[6]/td/input") # 获取登录按钮
login_button.click() # 点击登录按钮
sleep(3)
driver.quit() # 退出浏览器
上面的代码实现了将账号密码放在一个函数内,再去调用,进行登录操作。
以上,希望对你有帮助,有被帮助到的朋友欢迎点赞,评论。
腾讯大牛教你简单的自动化测试模型(Python+Selenium)的更多相关文章
- 简单的自动化测试模型(python+selenium)
刚接触自动化测试,由于没有编程语言的基础,是搞不懂代码里面的函数.封装.包以及其他概念,只是了解字符串.数组.元组及字典这种最基本的名词,更不懂自动化测试框架了. ...
- python+selenium 自动化测试实战
一.前言: 之前的文章说过, 要写一篇自动化实战的文章, 这段时间比较忙再加回家过11一直没有更新博客,今天整理一下实战项目的代码共大家学习.(注:项目是针对我们公司内部系统的测试,只能内部网络访问, ...
- 从原理到代码:大牛教你如何用 TensorFlow 亲手搭建一套图像识别模块 | AI 研习社
从原理到代码:大牛教你如何用 TensorFlow 亲手搭建一套图像识别模块 | AI 研习社 PPT链接: https://pan.baidu.com/s/1i5Jrr1N 视频链接: https: ...
- 简单实现接口自动化测试(基于python+unittest)
简单实现接口自动化测试(基于python+unittest) 简介 本文通过从Postman获取基本的接口测试Code简单的接口测试入手,一步步调整优化接口调用,以及增加基本的结果判断,讲解Pytho ...
- 手把手教你玩转SOCKET模型之重叠I/O篇(下)
四. 实现重叠模型的步骤 作 了这么多的准备工作,费了这么多的笔墨,我们终于可以开始着手编码了.其实慢慢的你就会明白,要想透析重叠结构的内部原理也许是要费点功夫,但是只是学会 如何来使用它,却 ...
- 使用jenkins + python + selenium一步步搭建web自动化测试“框架”(1) - 各部件简介
原先搭建过一个自动化测试框架,迷迷糊糊不求甚解,算是搭建了一个仅限于能用的.根本算不上框架的玩意儿. 现在回过头来好好看看究竟每一步是怎么联系起来的,是怎么运行起来的. 本次博客先说说各部件都是干什么 ...
- 篇2 安卓app自动化测试-初识python调用appium
篇2 安卓app自动化测试-初识python调用appium --lamecho辣么丑 1.1概要 大家好!我是lamecho(辣么丑),上一篇也是<安卓app自动化测 ...
- Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试(自由风格)
Jenkins简介 Jenkins是Java编写的非常流行的持续集成(CI)服务,起源于Hudson项目.所以Jenkins和Hudson功能相似. Jenkins支持各种版本的控制工具,如CVS.S ...
- 一步步教你轻松学KNN模型算法
一步步教你轻松学KNN模型算法( 白宁超 2018年7月24日08:52:16 ) 导读:机器学习算法中KNN属于比较简单的典型算法,既可以做聚类又可以做分类使用.本文通过一个模拟的实际案例进行讲解. ...
随机推荐
- loj #6039 「雅礼集训 2017 Day5」珠宝 分组背包 决策单调性优化
LINK:珠宝 去年在某个oj上写过这道题 当时懵懂无知wa的不省人事 终于发现这个东西原来是有决策单调性的. 可以发现是一个01背包 但是过不了 冷静分析 01背包的复杂度有下界 如果过不了说明必然 ...
- 基于AspectCore打造属性注入
前言 源自于晓晨在成都.net社区群的一篇文章 <晓晨的ASP.NET Core 奇淫技巧之伪属性注入> 他的思路是 Ioc容器替换 ControllerActivator,因为只能在控制 ...
- slots属性(省内存,限制属性的定义)
class Foo: __slots__=['name','age'] #{'name':None,'age':None} # __slots__='name' #{'name':None,'age' ...
- 重温这几个屌爆的Python技巧!
我已经使用Python编程有多年了,即使今天我仍然惊奇于这种语言所能让代码表现出的整洁和对DRY编程原则的适用.这些年来的经历让我学到了很多的小技巧和知识,大多数是通过阅读很流行的开源软件,如Djan ...
- zuul路由网关集成ssl,实现http到https的转变
1 前言 最近几天刚开始接触微信小程序的开发,才接触到了https的概念(微信小程序中的请求必须为https请求,不然请求无法成功).https算是对http的安全封装,在http的基础上加了ssl证 ...
- Unity 笔记
摄像机 Main Camera 跟随主角移动,不看 UI 剧情摄像机 当进入剧情时,可以关闭 main camera,启用剧情摄像机,不看 UI UI 摄像机 看 UI Unity编辑器常用的sett ...
- MySQL数据库安装,MySQL数据库库的增删改查,表的增删改查,表数据的基本数据类型
一 MySQL的安装 MySQL现在属于甲骨文公司,所以和java语言匹配度较高,同时甲骨文公司的另一种数据库为Oracle,两者同为关系型数据库,即采用关系模型来组织数据,以行和列的方法来存储数据的 ...
- jquery—实现能滚动的选项卡效果
选项卡在网页中很常见,可以说是必备的一个元素了,网上其实也有很多案例讲解选项卡的做法,写这篇文章,就是记录下自己的写一个的实例效果图: html: css样式: 主要是滚动条的的样式设置width:1 ...
- java中三大集合框架
一.List集合 1.List实现的超级父类接口:Collection 存储一组不唯一(允许重复),有序的对象. 2.了解ArrayList类 A):定义的格式:ArrayList<具体类型&g ...
- Golang 简单爬虫实现,爬取小说
为什么要使用Go写爬虫呢? 对于我而言,这仅仅是练习Golang的一种方式. 所以,我没有使用爬虫框架,虽然其很高效. 为什么我要写这篇文章? 将我在写爬虫时找到资料做一个总结,希望对于想使用Gola ...