PO模式+数据驱动(TPshop网站的登录模块进行单元测试以及区分正向逆向用例)

news/2024/5/16 18:27:06/文章来源:https://blog.csdn.net/yue_luo_/article/details/108017107

一、区分正向逆向用例

思路:在测试数据中添加一一个标识正向用例或逆向用例的标记:如:True/False
步骤:

  1. 调用登录方法(此登录方法中,只有输入用户名、输入密码、输入验证码、
    点击登录按钮)
  2. 判断用例标记:
    #判断安全退出是否存在
    #点击安全退出
    #点击登录连接地址

二、实例

TPshop网站的登录模块进行单元测试(最终版),可点击链接查看之前不同模式的测试

(一)实现步骤
  1. 编写测试用例
  2. 采用PO模式的分层思想对页面进行封装
  3. 编写测试脚本
  4. 定义数据文件,实现参数化
(二)用例设计

在这里插入图片描述

(三)代码结构图

在这里插入图片描述

(四)示例代码
  • 对象库层:base.py
"""base.py"""
# -*-coding:utf-8 -*-
# Auothor:yue_luo
import time
from selenium.webdriver.support.wait import WebDriverWaitclass Base:# 初始化def __init__(self,driver):self.driver = driver# 查找元素方法def base_find_element(self,loc,timeout=30,poll_frequency=0.5):return WebDriverWait(driver=self.driver,timeout=timeout,poll_frequency=poll_frequency).until(lambda x:x.find_element(*loc))# 点击方法def base_click(self,loc):self.base_find_element(loc).click()# 输入方法def base_input(self,loc,value):element = self.base_find_element(loc)element.clear()element.send_keys(value)# 获取文本方法def base_get_text(self,loc):msg = self.base_find_element(loc).textreturn msg# 截图def base_get_image(self,):self.driver.get_screenshot_as_file("./{}.png".format(time.strftime("%Y_%m_%d_%H_%M_%S")))# 判断元素是否存在def base_if_success(self,loc):try:self.base_find_element(loc, timeout=2)# 找到元素 assertTruereturn Trueexcept:return False
"""get_driver.py"""
# -*-coding:utf-8 -*-
# Auothor:yue_luo
from selenium import webdriver
from v3 import pageclass GetDriver:driver = None@classmethoddef get_driver(cls):if cls.driver == None:cls.driver = webdriver.Chrome()cls.driver.maximize_window()cls.driver.get(page.url)return cls.driver@classmethoddef quit_driver(cls):if cls.driver:cls.driver.quit()"""置空"""cls.driver = None
  • 操作层:_ _init _ _.py 和 page_login.py
"""__init__.py"""
# -*-coding:utf-8 -*-
# Auothor:yue_luo
from selenium.webdriver.common.by import By"""以下为服务器域名配置地址"""
url ="http://www.tpshop.com""""以下为登录页面配置信息"""
# 登录链接
login_link = By.PARTIAL_LINK_TEXT , "登录"
# 用户名
login_username = By.ID,"username"
# 密码
login_pwd = By.NAME,"password"
# 验证码
login_verify_code = By.CSS_SELECTOR,"#verify_code"
# 登录按钮
login_btn =By.NAME,"sbtbutton"
# 获取异常文本信息
login_err_info = By.CLASS_NAME,"layui-layer-content"
# 异常提示框 确定按钮
login_err_btn_ok = By.CSS_SELECTOR,".layui-layer-btn0"
# 安全退出
login_logout = By.PARTIAL_LINK_TEXT,"安全退出"
"""page_login.py"""
from v3 import page
from v3.base.base import Baseclass PageLogin(Base):# 点击登录链接def page_click_login_link(self):self.base_click(page.login_link)# 输入用户名def page_input_username(self,username):self.base_input(page.login_username,username)# 输入密码def page_input_passwrod(self,pwd):self.base_input(page.login_pwd,pwd)# 输入验证码def page_input_verify_code(self,code):self.base_input(page.login_verify_code,code)# 点击登录def page_click_login_btn(self):self.base_click(page.login_btn)# 获取异常提示信息def page_get_error_info(self):return self.base_get_text(page.login_err_info)# 点击异常信息框 确定def page_click_error_btn_ok(self):self.base_click(page.login_err_btn_ok)# 截图def page_get_screenshot(self):self.base_get_image()# 点击 安全退出->退出登录def page_click_logout(self):self.base_click(page.login_logout)# 判断是否登录成功def page_is_login_success(self):return self.base_if_success(page.login_logout)# 判断是否退出成功def page_is_logout_success(self):return self.base_if_success(page.login_link)#  组合业务方法def page_login(self,username,pwd,code):self.page_input_username(username)self.page_input_passwrod(pwd)self.page_input_verify_code(code)self.page_click_login_btn()
  • 业务层:test_login.py
"""test_login.py"""
# -*-coding:utf-8 -*-
# Auothor:yue_luo# 导包
import unittest
from time import sleep
from parameterized import parameterizedfrom v3.base.get_driver import GetDriver
from v3.page.page_login import  PageLogin# 参数化
from v3.tool.read_json import read_jsondef get_data():data = read_json("login.json")"""期望数据格式:[("13099999999","123456","8888","账号不存在!",false),("17864307785","error","8888","密码错误!",false)]"""list = []for n in data.values():list.append((n["username"], n["pwd"], n["code"], n["msg"],n["flag"]))# n["key"] 或n.get("key")return list# 新建测试类并继承
class TestLogin(unittest.TestCase):# setUp@classmethoddef setUpClass(cls):# 实例化driver并获取cls.driver = GetDriver().get_driver()# 实例化 获取登录对象cls.login =PageLogin(cls.driver)# 点击登录链接cls.login.page_click_login_link()# tearDown@classmethoddef tearDownClass(cls):# 关闭driver浏览器驱动对象sleep(3)GetDriver().quit_driver()# 登录测试方法@parameterized.expand(get_data())def test_login(self,username,pwd,code,expect_result,success):# 调用登录方法self.login.page_login(username,pwd,code)# 登陆成功if success :try:# 判断 安全退出是否存在self.assertTrue(self.login.page_is_login_success())print("***登录成功")# 退出self.login.page_click_logout()try:self.assertTrue(self.login.page_is_logout_success())except AssertionError:# 截图self.login.page_get_screenshot()raiseexcept AssertionError:# 截图self.login.page_get_screenshot()raisefinally:self.login.page_click_login_link()else:# 获取登录提示信息result = self.login.page_get_error_info()print("result;",result)sleep(1)#断言try:self.assertIn(result,expect_result)sleep(1)except AssertionError:#截图self.login.page_get_screenshot()raisefinally:# 点击提示框确定按钮self.login.page_click_error_btn_ok()sleep(1)
  • 数据文件(login.json)
{"login_01":{"username":"13099999999","pwd":"123456","code":"8888","msg":"账号不存在!","flag":false},"login_02":{"username":"17864307785","pwd":"error","code":"8888","msg":"密码错误!","flag":false},"login_03":{"username":"","pwd":"error","code":"8888","msg":"用户名不能为空!","flag":false},"login_04":{"username":"17864307785","pwd":"","code":"8888","msg":"密码不能为空!","flag":false},"login_05":{"username":"17864307785","pwd":"error","code":"","msg":"验证码不能为空!","flag":false},"login_06":{"username":"17864307785","pwd":"123456","code":"8888","msg":"安全退出","flag":true}
}
  • 工具类(read_json.py)
import jsondef read_json(filename):filepath ="../data/"+ filenamewith open(filepath,"r",encoding="utf8") as f:return json.load(f)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_871794.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐一些网站给大家

推荐一些网站给大家 首先要隆重推荐http://www.moreofit.com/ 这个网站可以发现跟你输入网站类似的网站,如我们在地址栏中输入博客园的地址http://www.cnblogs.com/, 点击查看,系统会列出和博客园类似的网站,没准你会发现很多有意…

一篇文章学会独立在Windows server 2003虚拟机上搭建网站

本文学习:在Windows server 2003 虚拟机上的服务器搭建一个网站,非常详细,我都会了真的,有手就行。 Windowsiisaspaccess 环境:一台windows server 2003虚拟机。 准备工作什么也没有,开始搭建 开始测试搭建…

*.github.io的个人博客网站无法连接的问题

问题描述 就是这个样子的,类似*.github.io的网站都打不开,而且是手机电脑连接同一个WIFI,都打不开,但是我手机换了数据,就可以打开了,也是很奇怪,突然就这样了,我也不知道怎么回事&a…

Python多进程之刷小网站浏览量。

作者刚入门Python爬虫,如代码有问题,请大佬评论区指出!! 代码实现: 1,通过multiprocessing中的进程池实现多进程爬虫。 2,通过requests发起get请求刷浏览量。 代码: from multipr…

爬了招聘网站之后,总结Python学习的几点建议

来源商业新知网,原标题::爬了招聘网站之后,给你几点学习Python的建议 Python语言相关的岗位非常多,有运维,有自动化测试,有后端开发,有机器学习,如果想要快速上手&#x…

点击链接自动定位到网页某个具体位置和网站右侧导航介绍

页面点击链接后&#xff0c;自动定位到网页某个具体位置 <!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <title>test</title> </head> <body> …

大型网站架构提速关键技术(页面静态化、memcached、Mysql优化)

大型网站关键技术介绍 1. pv值(page views),访问量大 带来问题 a. 流量大 10000000*2m ->解决方案 买带宽 ,优化程序(处理图片) b. 并发量,同时访问网站的人多.,解决方案 对程序的架构重新设计.->服务器集群 示意图: 1. 数据量大->10亿记录 解决方法是 a. 表的…

问答网站Quora副总裁杨蕾博士:让知识改变世界

????点击上方蓝字星标“Robinly”&#xff0c;获取更多重磅AI访谈 Robin.ly 是立足硅谷的视频内容平台&#xff0c;服务全球工程师和研究人员&#xff0c;通过与知名人工智能科学家、创业者、投资人和领导者的深度对话和现场交流活动&#xff0c;传播行业动态和商业技能&am…

Nginx对某个目录或整个网站进行登录认证的方法

比如要对 网站目录下的 test 文件夹 进行加密认证 首先需要在opt 的主目录中 /opt/ 创建一个新文件 htpasswd 此文件的书写格式是 用户名:密码 每行一个账户 并且 密码必须使用函数 crypt(3) 加密 官方档说 可以用 Apache 的 htpasswd 工具来创建密码文件 [rootlocalhost /]#…

网站分析基础概念之访问停留时间

类型&#xff1a;计数度量 定义&#xff1a;访问停留时间&#xff08;Visit Duration&#xff09;是指一次访问的持续时间。典型的计算方法是在一次访问中&#xff0c;用户最后一次操作发生的时间减去第一次操作发生的时间。 扩展&#xff1a; ● FAQ&#xff1a;为什么访问停留…

网站分析基础概念网页浏览数

■网页浏览数 类型: 计数度量 定义:网页浏览数&#xff08;Page Views&#xff0c;简称PV&#xff09;是指网页被浏览的次数。只要网页与服务器端完成一次请求&#xff0c;网页的浏览数就被累加一次。 说明&#xff1a;为了便于大家的理解&#xff0c;下面举例说明一下。下图是…

网站分析基础概念之新近度

类型&#xff1a;计数度量 定义&#xff1a;新近度&#xff08;Recency&#xff09;是指在一段时间内&#xff0c;访问过网站的访问者距离上次访问的时间间隔。也就是“访问频率”。 举例说明&#xff1a;2014年5月份&#xff0c;“综合购物网”的访问数&#xff08;Visits&…

网站站内数据分析

从来不喜欢说自己的感受。为什么呢&#xff0c;因为在现在这个社会&#xff0c;没有人会真正的去听你的感受。绝大多数人都只看重结果。所以即使有人问&#xff0c;我也不愿说。 一直以来&#xff0c;总喜欢给自己很大的压力。我是一个很怕被甩到后面的人。自尊心强&#xff0c…

python django学习制作一个音乐网站并将项目部署到阿里云服务器上

本音乐网站参考了黄永祥编写的书本《玩转Django 2.0》。 网址&#xff1a;http://xiaomokuaipao.com/ 欢迎关注公众号&#xff1a;Faster_Future 一、数据库的设计&#xff1a;1.歌曲信息表&#xff1a;记录了歌曲的信息。 2.歌曲分类表&#xff1a;实现歌曲的分类。 3.歌曲动…

web前端 html+css+javascript网页设计实例 企业网站制作

(案例源码链接在文章末尾&#xff0c;仅供学习参考) 一、在浏览器中的运行结果&#xff1a; 二、部分代码 1.HTML&#xff1a; <!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8"><title>启乐官网</title&g…

社会化分享bshare代码在网站中的使用(包括https下无效的解决方法)

一、代码的安装与放置 在bshare中选择好自己喜欢的代码样式之后&#xff0c;将代码复制进网站中 放入代码后&#xff0c;就会出现分享按钮。如果想要关键词和按钮平行显示的话&#xff0c;可利用table进行放置 显示结果如下&#xff1a;乌克兰玛丽塔医院 二、bshare代码在h…

如何在Windows服务器(Windows2012)中建网站

前期准备&#xff1a;一台安装了Windows的服务器 方法一&#xff1a;&#xff08;推荐&#xff09; 直接安装phpstudy或者Windows版本宝塔&#xff08;教程可在官网找&#xff09; 方法二&#xff1a; 1、进入服务器管理&#xff1a;选择添加角色和功能&#xff08;控制面板…

seowhy杂谈区顶贴模块,如何使用?

转载于:https://www.cnblogs.com/renzhe/archive/2012/09/14/3005828.html

nitc企业网站程序 V3.2正式版 发布模块,如何使用?

转载于:https://www.cnblogs.com/renzhe/archive/2012/09/24/3005842.html

忍者X3又添新成员 IIS6批量建站

前言 此工具&#xff0c;应该允许在服务器上&#xff0c;推荐是win2003。 服务器配置 1、远程桌面 2、安装配置服务器环境&#xff0c;这里我推荐使用【网站管理助手V3】&#xff0c;如果找不到地址&#xff0c;可以到下图的 一键安装PHPMysqlZend环境&#xff0c;这个链接来获…