自学Python+Selenium自动化测试

本文介绍了使用Python和Selenium进行自动化测试的要点,包括测试用例设计注意事项、设计原则、实践经验以及脚本开发,强调了有效场景构建、减少复杂度、用例独立性和数据驱动测试的重要性,并提供了OCR识别和自动化测试模型的实例。
摘要由CSDN通过智能技术生成

        俗话说的好,书读百遍不如手过一遍,而编程这东西是看书看视频一万遍都不如你自己多敲代码、写脑图、总结分享转换成自己的内容来的实在。

        今天我就把最近学的(三)自动化测试-测试用例设计简单总结一下,方便自己以后找出来看看。


目    录

        一、测试用例设计注意事项

        二、测试用例设计设计原则

        三、测试用例设计设计实践

        四、测试用例设计脚本开发


        一、测试用例设计注意事项

        1、不是所有的手工测试用例都要转换为自动化测试用例。

        2、考虑到脚本开发的成本,不要选择流程太复杂的用例。若有必要,可以把流程拆分成多个用例来实现脚本。

        3、选择的用例最好可以构建场景。如功能模块分多个用例使用同一个场景。

        4、选择的用例可以是你认为是重复执行很繁琐的部分。如字段验证、提示信息验证,适用于回归测试。

        5、选取的用例可以是主体流程,适用于冒烟测试。


        二、测试用例设计设计原则

        1、一个用例为一个完整场景。(从用户登录系统到最终退出并关闭浏览器)

        2、一个用例只验证一个功能点。(不要试图在用户登录后把所有功能都验证一遍)

        3、尽可能少的编写逆向测试用例。(逆向逻辑用例很多)

        4、脚本脆弱,判断逻辑与断言方式简单一些。(复杂的逆向逻辑用例实现麻烦容易出错

        5、用例与用例之间尽量避免产生依赖。

        (1)复杂度度量(测试)-高内聚低耦合(开发、白盒-代码圈复杂度过高出错概率过高、有效注释率≥20%)

        (2)模块(用例)中功能全面、多个模块(用例)尽量不产生联系)

        6、用例完成测试需对测试场景还原,避免影响其它用例执行。

         圈复杂度本人还不是很会,基本了解一点浅识:大概就是圈复杂度越高,代码越复杂;最简单的例子就是循环嵌套层数中,两层的圈复杂度低于三层的圈复杂度,一般都用一两层。


        三、测试用例设计设计实践

        1、测试点转换为测试用例原则:有效一对多,无效多对一

        (1)一条正向用例,覆盖足够多的有效等价类数据。

        (2)一条反向用例,覆盖一条无效等价类数据,其他数据为有效等价类数据。

        2、有验证码时如何进行自动化

        (1)让开发暂时屏蔽验证码(适用于测试环境)

        (2)让开发将验证码改为万能码(如“000000”)

        (3)机器学习训练样本,可达到99%以上识别成功率

        (4)调用OCR接口(文字识别)解析图片中的验证码

        (5)记录cookies(给浏览器中添加cookies绕过登录验证)

        3、python中的OCR图文识别

        (1)pytesseract:需要配合本地安装tesseract-ocr.exe

        (2)PaddleOCR:百度开源、依赖库(paddlepaddle、shapely、paddleocr)、对中文的识别精度高

        (3)easyocr:支持80多种语言的识别,识别精度超高

        (4)muggle_ocr:轻量级的ocr识别库,识别各类验证码

        (5)dddd_ocr:识别验证码

import ddddocr


# 输入验证码:先将验证码截图成png图片存储在变量中,再通过ddddocr图文识别插件将验证码转换为字符串存储到变量中
captcha_img = driver.find_element(value="captcha-img").screenshot_as_png
captcha = ddddocr.DdddOcr().classification(captcha_img)
driver.find_element(value="captcha").send_keys(captcha)
time.sleep(0.5)

        四、测试用例设计脚本开发

        1、自动化测试模型

        (1)线性测试

        以一行行代码直接实现测试步骤,脚本相对独立,单纯的模拟用户完整的操作场景,测试用例的开发和维护成本很高。若一个页面元素被改动,所有线性脚本中用到此元素的地方都需要更改。脚本运行结果不一定是bug。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author:bigbear
# datetime:2022/9/1 12:47
# software: PyCharm

"""
verydows的线性测试:
    需求:使用线性脚本模型,编写电商系统正向用例的脚本
        打开verydows系统首页
        点击“免费注册”链接
        输入有效用户名
        输入有效邮箱
        输入有效密码
        输入有效确认密码
        输入验证码
            验证码解决办法:使用先获取验证码截图,再调用ddddcor图文识别插件,将图片中的验证码转换为字符串格式
        勾选已阅读复选框
        点击“立即注册”链接
"""
import time
import ddddocr
from selenium import webdriver
from selenium.webdriver.common.by import By

# 创建浏览器驱动对象
driver = webdriver.Edge()
# 打开edge浏览器并跳转到verydows首页
driver.get("http://kkk.xmyxwl.com/")
# 1、打开首页断言:获取首页URL,通过if-else语句判断
url1 = driver.current_url
if url1 == "http://kkk.xmyxwl.com/":
    print("首页打开正确")
else:
    print("首页打开失败")
# 点击首页“免费注册”按钮
driver.find_element(by=By.LINK_TEXT, value="免费注册").click()
time.sleep(1)
# 2、跳转注册页面断言:获取注册页面URL,通过if-else语句判断
url2 = driver.current_url
if url2 == "http://kkk.xmyxwl.com/index.php?c=user&a=register":
    print("跳转后的注册页面正确")
else:
    print("跳转后的注册页面失败")
# 用户名可以包含字母、数字或下划线,须以字母开头,长度为5~16个字符
driver.find_element(value="username").send_keys("aaaaaa123456")
# 请填写您常用的电子邮箱地址,邮箱可用来重置密码,接收订促销信息,订单状态等
driver.find_element(value="email").send_keys("aaaaaaaaa@163.com")
# 密码可包含字母、数字或特殊符号,长度为6~32个字符
driver.find_element(value="password").send_keys("123456")
# 确认您所设置的密码
driver.find_element(value="repassword").send_keys("123456")
# 输入验证码:先将验证码截图成png图片存储在变量中,再通过ddddocr图文识别插件将验证码转换为字符串存储到变量中
captcha_img = driver.find_element(value="captcha-img").screenshot_as_png
captcha = ddddocr.DdddOcr().classification(captcha_img)
driver.find_element(value="captcha").send_keys(captcha)
time.sleep(0.5)
# 默认已勾选已阅读完并同意 "用户注册协议"复选框
# driver.find_element(value="agree").click()
# 点击立即注册链接
driver.find_element(by=By.LINK_TEXT, value="立即注册").click()
time.sleep(5)
# 不管是否注册成功,3秒内都会停留在url="http://kkk.xmyxwl.com/index.php?c=user&a=register&step=submit"
urlAction = driver.current_url
if urlAction == "http://kkk.xmyxwl.com/index.php?c=user&a=index":
    print("测试用例通过")
else:
    print("测试用例失败")
driver.quit()

        (2)模块化驱动测试

        把重复的操作独立成公共模块(类、方法),当用例执行过程中需要用到这一模块时则被调用,最大限度的消除了重复,提高了测试用例的复用性、可维护性。(登录模块、退出模块、邮件发送模块、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值