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

news2024/9/28 17:15:28

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快

一、什么是自动化测试

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

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

①需求变动频繁

②项目周期短

③自动化脚本一次性

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

三、自动化测试过程

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

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

组合有两个:

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

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

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

上面的自动化测试用例中有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与浏览器或者浏览器版本是否匹配

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

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

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

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

相关文章

自动化check是不是测试?

这篇文章是reddit上关于质量保障讨论的比较多的帖子,我把它转为中文版,供大家交流学习,由于直接用的翻译软件以及截图,大家凑合看下哈。 自动化检查并不是真正的“测试”?编写自动化检查确实很重要——但编写自动化测…

笔记整理—linux进程部分(1)进程终止函数注册、进程环境、进程虚拟地址

对于mian()函数而言,执行前也需要先执行一段引导代码才会去执行main()函数,该部分的代码包含构建c语言的运行环境等配置,如清理bss段等。 在使用gcc去编译程序的时候,使用gcc -v xxx.c可见链接过程。在编译完成后可见xxx.out文件。…

[产品管理-33]:实验室技术与商业化产品的距离,实验室技术在商业化过程中要越过多少道“坎”?

目录 一、实验室技术 1.1 实验室研究性技术 1.2 技术发展的S曲线 技术发展S曲线的主要阶段和特点 技术发展S曲线的意义和应用 二、实验室技术商业化的路径 2.1 实验室技术与商业化产品的距离 1、技术成熟度与稳定性 - 技术自身 2、市场需求与适应性 - 技术是满足需求 …

计算机毕业论文及毕业设计题目,计算机专业大专本科学位毕业论文题目推荐大全集

目录 一 软件工程方向 二 网络安全方向 三 人工智能与机器学习方向 四 大数据方向 五 云计算与虚拟化方向 六 数据库与信息系统方向 计算机专业的毕业论文或毕业设计题目通常需要结合当前的技术趋势以及个人兴趣来确定。一个好的选题不仅能够体现学生的学术水平和技术能…

【行业报告】AI大模型对我国劳动力市场潜在影响研究报告(2024),附PDF下载!!

前言 9月13日,北京大学国家发展研究院联合智联招聘在中国国际服务贸易交易会上发布的《AI大模型对我国劳动力市场潜在影响研究:2024》(以下简称“报告”)显示,2024年上半年,招聘职位数同比增速前五的人工智…

【含文档】基于Springboot+Vue的高校自习室预约系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

git小乌龟

下载git小乌龟 官方地址 Download – TortoiseGit – Windows Shell Interface to Git git小乌龟下载 选择自己对应的版本进行下载 安装完成后我们会发现是英文,这对我们这些英语不好的很不友好,所以就需要下载语言包 下载对应语言包 安装完成后我们…

自然语言处理实战项目:从基础到实战

自然语言处理实战项目:从基础到实战 自然语言处理(Natural Language Processing, NLP)是人工智能的重要分支,致力于让计算机能够理解、生成和处理人类语言。NLP 在搜索引擎、智能客服、语音助手等场景中扮演着关键角色。本文将带…

HTML5--裸体回顾

免责声明:本文仅做分享~ 详情请参考以下: HTML 系列教程 (w3school.com.cn) 菜鸟教程 - 学的不仅是技术,更是梦想! --本文是光秃秃的空壳. 标题标签 段落标签 换行和水平线 文本格式化标签 (一般用左边的&#xff…

2024年10月CISAW课程安排

信息安全保障人员(CISAW)各方向的第一阶段和第二阶段培训本月将以线上线下模式开展 CISAW根据专业领域分为多个类别,如安全集成、安全运维、风险评估、应急服务、软件安全开发等,通过培训后可获得全国通用的信息安全保障人员认证证…

Linux驱动编程——根文件系统

一 、续上节 TFTP为简单文件传输协议,底层基于UDP。 ★1、arm上电后两种方式启动原理 (1)Nor flash可直接寻址,前面在使用2440时,均使用的是Nor flash; pc指令开始为0,上电后先指向地址为0的…

240929-DCGAN生成漫画头像

240929-DCGAN生成漫画头像 DCGAN是GAN的直接扩展,简单从命名来理解,DCGAN(Deep Convolutional Generative Adversarial Networks)就是比GAN(Generative Adversarial Networks)多了DC(Deep Conv…

《黑神话:悟空》天命人速通法宝 | 北通鲲鹏20智控游戏手柄评测

《黑神话:悟空》天命人速通法宝 | 北通鲲鹏20智控游戏手柄评测 哈喽小伙伴们好,我是Stark-C~ 截止目前,《黑神话:悟空》已经面世一个多月,不知道还有多少天命人没有通关呢? 作为国内首款真正意义上的3A大作,《黑神话…

SSD在低地球轨道卫星应用中的挑战

随着太空技术的迅速发展,越来越多的卫星被发射到低地球轨道(Low-Earth-Orbit,缩写LEO,又称“近地轨道”),以支持通信、地球观测、技术开发等多种任务。然而,这些卫星在轨道运行期间面临着严峻的…

国庆头像制作小程序相关代码

↓↓ 点击下方搜索开始制作您的专属头像 ↓↓ 发现-》搜一搜-》最美易飞证件照制作 国庆头像自定义头像制作、微信头像直接获取制作小程序源码 index.wxml文件代码 // pages/userPhoto/userPhoto.js//获取应用实例const app getApp()import { Router} from ../../utils/ro…

Transformer 算法模型详解

核心点:完整讲解Transformer模型! 让我们用简单的语言来解释:想象一下,你正在阅读一本书,书中的每个字都很重要。但如果你每次只能关注一个字,理解整本书就会变得很慢。而Transformer模型就像是赋予你超能…

机器学习-SVM

线性感知机分类 支持向量机 线性感知机(Perceptron) 感知机是线性二值分类器。 注意:什么是线性?线性分割面就是,就是在分割面中,任意两个的连线也在分割面中,这个分割面,就是线…

【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇(上)

系列文章目录 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(上) 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(下) 【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇(上) 文…

在系统开发中提升 Excel 数据导出一致性与可维护性的统一规范与最佳实践

背景: 在系统开发过程中,数据导出为 Excel 格式是一个常见的需求。然而,由于各个开发人员的编码习惯和实现方式不同,导致导出代码风格不一。有的人使用第三方库,有的人则自定义实现。这种多样化不仅影响了代码的一致性…

Electron 安装以及搭建一个工程

安装Node.js 在使用Electron进行开发之前,需要安装 Node.js。 官方建议使用最新的LTS版本。 检查 Node.js 是否正确安装: # 查看node版本 node -v # 查看npm版本 npm -v注意 开发者需要在开发环境安装 Node.js 才能编写 Electron 项目,但是…