自动化测试实例—Web登录功能性测试(无验证码)

news2024/9/20 20:38:41

🍅 视频学习:文末有免费的配套视频可观看

🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快

一、什么是自动化测试

把人为驱动的测试行为转化为机器执行的一种过程称为自动化测试。(来自百度百科)本质上来说,自动化测试对比起手工测试除了需要写代码外并没有什么不同,它们的不同在于在各自适合的场景不同,从而使它们能够在它们的场合发挥更大的优势。

二、什么情况不需要自动化测试

①需求变动频繁

②项目周期短

③自动化脚本一次性

等受时间(少)、技术(难度大)和重用性(低)因素影响的情况

三、自动化测试过程

上面说了很多概念性的东西,现在我引入一个实例来说明自动化测试的过程。现在有一个场景,我们需要测试一个网站的登录界面(简书的登录页面)。

首先需要写测试用例(如果有需求文档再写测试用例更好,这里的登录只做最简单的手机或邮箱、密码登录,其他如记住我,注册功能不测试)

组合有两个:

手机+密码,可以拓展成①手机已注册+密码正确,②手机已注册+密码不正确,③手机未注册+密码在数据库内,④手机未注册+密码不在数据库内,⑤手机号密码均为空,⑥手机号为空,⑦密码为空,⑧手机号密码都不空。其中手机号密码全部空的情况前面四种情况都可以验证。

邮箱+密码,可以拓展的几个方面与上面相同。所以写成的手工测试用例如下图(图片中所有数据均为虚拟数据,仅供参考)

然后我们可以把这个手工测试用例转变成自动测试用例,以上的用例都属于登录这个行为的,自动化测试的用例比手工测试的用例要更详细一点。 这里举两个例子

上面的自动化测试用例中有id(编号),feature(功能名称),scenario(场景名称),given(前置条件),when(操作步骤),then(预测结果),result(实际结果)这几个元素其中,given,when,then是所有用例的基本元素,在此基础上还可以扩展更多的元素如测试数据的覆盖率,测试结果的可靠性等等,这里的元素都是用到英文是为了方便使用某些测试框架的时候直接用,可以看到里面填入的内容对比起手工测试用例要更加详细更加脚本化。

经过用例设计评审后开始进行测试,因为这次是自动化测试,所以需要写脚本,验证脚本正确性,提交缺陷。如果把脚本和用例等写在测试框架里面会更有利于我们对这次测试的管理,不过自动化测试框架是一个需要展开的内容,所以留到下下次讲。

现在我们用一个现成的框架unittest

import unittest
import time
from selenium import webdriver
from selenium.webdriver import ActionChains

class testcase(unittest.TestCase):

    def setUp(self):
        print("test start")
        self.browser = webdriver.Chrome(r'D:\webdriver\chromedriver.exe')
        url = 'https://www.jianshu.com/sign_in'
        self.browser.get(url)
        input1 = self.browser.find_element_by_id('session_remember_me')
        selected = input1.is_selected()
        if selected:#判断勾选框是否勾选,把“记住我”勾选去掉
            input1.click()

    def test_Login_001(self):#必须要加test在前面不然不执行
        print("Login_001")
        
        self.browser.find_element_by_id('session_email_or_mobile_number').send_keys('18888888888')
        self.browser.find_element_by_id('session_password').send_keys('ABC111')
        self.browser.find_element_by_class_name('sign-in-button').click()
        time.sleep(30)
        try:
            hover_element = self.browser.find_element_by_class_name('user')
            #获取需要鼠标悬停才能显示下拉栏的元素class
            ActionChains(self.browser).move_to_element(hover_element).perform()
            #鼠标移动到这个元素并悬停(在头像处悬停)
            time.sleep(3)
            self.browser.find_element_by_link_text('我的主页').click()
            #悬停后下拉栏选择“我的主页”
            result1 = self.browser.find_element_by_xpath("//a[@class='name']").text
            self.assertEqual(result1, '昵称')
            #只能是self.直接不能是self.browser.
        except Exception as e:
            print("error reason:s%" % e)
            raise e
        time.sleep(1)
    def test_Login_002(self):
        print("Login_001")
        self.browser.find_element_by_id('session_email_or_mobile_number').send_keys('18888888888')
        self.browser.find_element_by_id('session_password').send_keys('')
        self.browser.find_element_by_class_name('sign-in-button').click()
        time.sleep(8)
        try:
            result1 = self.browser.find_element_by_xpath("//span[@class='noty_text']").text
            self.assertEqual(result1, '手机号码/邮箱地址或密码不能为空')
            #只能是self.直接不能是self.browser.
        except Exception as e:
            print("error reason:s%" % e)
            raise e
        time.sleep(1)
    '''
    可以继续加入用例
    '''

    def tearDown(self):
        self.browser.quit()
        print('test gone')

if __name__=="__main__":
    unittest.main()

上面的代码只写了两条用例,剩下也是按照这个思路写,很多的代码解释我也写作注释了。因为这一篇章我不考虑验证码的问题,所以这里处理验证码的方法是在按登录后等待手动操作接着获取结果,用断言assertEqual判断结果是否正确。

这里用了setup和teardown两种方法,这两种方法都是每个case运行前或运行后都会执行一次的。这里也可以用setupclass和teardownclass来替代,这两种方法是在所有case执行前或执行后用一次,如果在以上这个例子中用setupclass和teardownclass需要在每个case的结尾加上重置回登录页面的代码,所以setupclass和teardownclass更加适合流程递进的用例。

不过这里需要提一下最后的这里unittest.main(),可以看到在执行程序前,引入了unittest,最后这个入口也指向了unittest的main方法,我们来看一下用例是如何被实现的。

首先,打开python文件夹,如果没有改安装路径应该会在C盘(如C:\Python\Lib\unittest),打开main.py文件可以看到unittest.main()调用的是class TestProgram进入到init初始化testRunner、testLoader并根据用例模块即我们写的case创建测试集和执行它。简单来说就是unittest.main()其实是到了class TestProgram里面我们的case经过init方法初始化case需要进行的所有动作,parseArgs方法传入参数并赋值,createTests方法根据前一个方法的赋值创建测试集,runTests方法执行测试用例这四个步骤。

完成测试需要输出测试结果

import unittest
import HTMLTestRunner
import time
import testcase

suite=unittest.TestSuite()#创建测试集,也就是把所有的用例放在一起
ts=unittest.TestLoader()#加载测试

suite.addTests(ts.loadTestsFromModule(testcase))#寻找模块名testcase的用例,把它加载并加入到测试集

now=time.strftime("%Y-%m-%d_%H_%M_%S")
path="python_report"+now+".html"

with open(path,"wb+") as f:
    runner=HTMLTestRunner.HTMLTestRunner(stream=f,verbosity=2,title='MathFunc Test Report',description='generated by HTMLTestRunner.')
    '''
    stream表示测试报告写入文件的存储区域,如stream=f表示以文件流的方式输出报告到open(path,"wb+")的路径
    verbosity=1的时候 默认值为1,不限制完整结果,即单个用例成功输出’.’,失败输出’F’,错误输出’E’
             =0的时候。不输出信息
             =2的时候,需要打印详细的返回信息
    title表示测试报告标题
    description表示测试报告描述
    '''
    runner.run(suite)#输出结果html

这里的HTMLTestRunner我是下载HTMLTestRunner.py再进行修改得到的 ,修改方法及下载网上可查,你也可以通过pip install html-testRunner的方法下载最新的HTMLTestRunner,方法同样网上可查展示效果如下:

用户指导手册

用户指导手册每个公司都会有模板按照模板来写就可以了。

四、在这个过程你可能会遇到的问题

1.下载webdriver与浏览器或者浏览器版本是否匹配

这一章,主要说了不需要验证码的自动化登录是如何执行的,下一章我们聊一下有验证码的情况应该如何做登录功能的自动化测试,下下一章我们再聊自动化测试框架。

同时,在这我为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看,也可以直接【点击文末小卡片免费领取资料文档】

B站强推!建议所有想学自动化测试的,死磕这个视频,2024年字节最新内部教程,全程干货无废话!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据防泄漏的具体方法有哪些?数据防泄漏教程分享

曾经有一个非常严重的数据泄漏事件,是一家制造业相关的公司,经过调查,发现是员工在未经授权的情况下将客户数据通过电子邮件发送给了外部人员。 这一事件导致了客户隐私的泄露,给该机构带来了巨大的法律风险和声誉损失。 其实每…

DolphinScheduler——蔚来汽车数据治理开发平台的应用改造

目录 一、业务痛点 二、应用现状 三、技术改造 3.1 稳定性 3.1.1 滚动重启黑名单机制精准路由 3.2 易用性 依赖节点优化 补数任务优化 多 SQL 执行 原文大佬的这篇基于调度系统的数据治理案例有借鉴意义,这里摘抄下来用作学习和知识沉淀。 一、业务痛点 蔚…

tomcat 搭建博客 及破解数据库密码

一 tomcat 搭建博客 (一)博客安装包 1, 把博客war包 放到 webapps 文件夹下 2,会自动解压 3,做个软连接 方便后续操作 可以注意到 因为war包 是又tomcat 自己解压的 所以属主数组还是 tomcat &#xff08…

Redis性能攻略:Redis-benchmark工具与实用性能优化技巧

Redis作为一种高性能的内存数据库,广泛应用于各种业务场景。然而,随着业务规模的扩大和数据量的增长,Redis的性能问题逐渐凸显出来。为了提高Redis的性能,本文将深入探讨Redis性能优化方案,包括参数配置、数据结构、多…

Java的运行机制与Java开发环境的搭建

1.编译和执行 首先通过文本编辑器编写源程序(后缀为.java),再利用编译器编译成字节码文件(后缀为.class),最后利用虚拟机也叫解释器解释执行。 2.JVM、JRE和JDK的区别 简单来说, ①JVM 提供了运行 Java 程…

【HbuilderX】 uniapp实现 android申请权限 和 退出app返回桌面

目录 android申请权限: 监听用户是否开启权限或关闭权限: 退出app返回桌面: android申请权限: 首先在 manifest.json 内添加你所需要用到权限 添加权限插件 permission.js 一次就好1/权限插件 - Gitee.comhttps://gitee.co…

学习和工作的投入产出比(节选)

人工智能统领全文 推荐包含关于投入、产出、过剩、市场关注、案例、结果和避雷等主题的信息: 投入与产出: 投入和产出都有直接和间接两类常见形式。常见的四种组合是:直接投入、直接产出、间接投入、间接产出。 过剩: 过剩是一个重…

农产品质量追溯系统—简介

概要 农产品质量安全事关广大人民群众的食用安全和身体健康。解决农产品质量安全问题,需要从源头开始抓好、抓实农产品安全监管工作。通过建立从产地到市场的全程质量控制系统和追溯制度,对农产品产地环境、生产过程、产品检测、包装盒标识等关键环节进行监督管理,提高广大…

快速开发一个鸿蒙的页面

文章目录 前言常用组件快速开启简单的鸿蒙页面总结 一、前言 鸿蒙要想快速上手,那么就需要对基础的组件使用比较熟悉,这里就罗列开发中常见的基础组件的使用。 只要是写android的,对于这些组件的使用还是能很快上手的,只要多多…

AI智能分析网关V4智慧环保/智慧垃圾站视频智能分析与监控方案

一、背景介绍 随着城市化进程的加速,垃圾处理问题日益受到人们的关注,传统的垃圾站管理方式已经无法满足现代社会的需求。针对当前垃圾站的监管需求,TSINGSEE青犀可基于旗下视频智能检测AI智能分析网关V4与安防监控视频综合管理系统EasyCVR平…

【STM32】江科大STM32学习笔记汇总(50)

00. 目录 文章目录 00. 目录01. STM32学习笔记汇总02. 相关资料下载03. 附录 01. STM32学习笔记汇总 【STM32】STM32学习笔记-课程简介(01) 【STM32】STM32学习笔记-STM32简介(02) 【STM32】STM32学习笔记-软件安装(03) 【STM32】STM32学习笔记-新建工程(04) 【STM32】STM…

十年经验讲解功能测试的一些基本操作以及报告编写

一、 输入框测试 1. 字符型输入框: (1)字符型输入框:英文全半角、数字、空或者空格、特殊字符“~!#¥%……&*?[]{}”特别要注意单引号和&符号。禁止直接输入特殊字符时,使用…

[递归与递推] 栈与卡特兰数

题目背景 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表。 栈有两种最重要的操作,即 pop(从栈顶弹出一个元素)和 push(将一个元素进栈)。 栈的重要性不言自…

每日一“类“:深入理解Qt的心脏《QObject》

Qt框架以其强大的跨平台能力和丰富的用户界面元素而广受开发者欢迎,而QObject类无疑是Qt框架心脏的所在。本文将深入探讨QObject,揭示其提供的核心功能以及如何在Qt项目中有效利用这个基类。 核心功能 信号与槽 Qt独特的信号与槽机制是其事件通信的基…

【Rust】——结构体struct

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

vue系列——vscode,node.js vue开发环境搭建

第一步安装node.js 推荐使用nvm进行node.js 的安装 nvm(Node.js version manager) 是一个命令行应用,可以协助您快速地 更新、安装、使用、卸载 本机的全局 node.js 版本。 可以去网上查找相关版本 我这里使用 nvm-setu… 链接:https://pan.baidu.com/s/1UEUtmzw5x…

spring事务方法调用不生效的场景

同一个类中&#xff0c;事务方法调用非事务方法时&#xff0c;事务是可以生效的。反例事务不生效见以下 4. 同一个类中&#xff0c;方法内部调用 Autowired private XXXMapper xxxMapper; Autowired private YYYMapper yyyMapper; Transactional public ResultVO<AssetCh…

pag动效预览

潮玩apk里面分析静态资源发现动效有lottie 和pag文件 PAG官网 | PAG动效PAG动效组件可以降低或消除动效相关的研发成本&#xff0c;接入SDK后&#xff0c;设计师可通过PAGExpoter、PAGViewer等工具&#xff0c;一键将设计师在 AE 中制作的动效内容导出成素材文件&#xff0c;并…

【QT 5 +Linux下软件qt软件打包+qt生成软件创建可以安装压缩包+学习他人文章+第三篇:学习打包】

【QT 5 Linux下软件qt软件打包qt生成软件创建可以安装压缩包学习他人文章第三篇&#xff1a;学习打包】 1、前言2、实验环境3、自我学习总结-本篇总结&#xff08;1&#xff09;了解安装包的目录结构&#xff08;2&#xff09;了解要编写文件与编写脚本1. control文件2. postin…

vue3+vite 项目的创建

这里要提醒一下&#xff0c;如果我们要使用 vue3 的组合式api 的写法的话&#xff0c; 那么我们使用的 vue 版本不能低于 vue3.2 版本&#xff0c;不能低于 vue3.2 版本&#xff0c;不能低于 vue3.2 版本 vue2 已停止维护了&#xff0c; 现在全面拥抱vue3 之前用 vue-cli 创建…