如何进行软件自动化测试?新手入门三步走!

本文所用到的案例:
在这里插入图片描述

图一为登录首页,当输入用户名和密码后,点击【登录】按钮,如果用户名密码正确进入图三登录成功页面,否则弹出错误消息;点击【进行注册】按钮进入图二进行注册;点击【清除】按钮,清除数据库中的所有数据,这个按钮是为测试而临时设置的,正式产品中将会取消。

图二为注册页,当输入用户名和密码后,点击【注册】按钮,当输入的用户名在数据库中不存在,注册成功,返回图一的登录页面,否则弹出错误消息。

图三为登录成功页,当在图一中输入正确的用户名和密码后,进入这个页面,这里的"Hello world"将变为"Welcome "+用户名。

谈起软件自动化测试,许多没有从事过软件开发的同学来说,感觉比较困难。但是你一旦了解了软件自动化测试的步骤后,然后再进行自动化测试代码的开发就比较方便了。本文主要探讨自动化测试的三大步骤以及接口自动化测试的四大小步骤以及基于UI自动化测试的三大小步骤。
在这里插入图片描述

软件自动化测试的三大步骤为:设置环境、执行测试和清除环境;接口自动化测试的四大小步骤为:组织协议包、发送协议包、接受协议包和分析协议包;基于UI自动化测试的三大小步骤为:获取对象、操作对象和断言。

1)我们先来考虑软件自动化测试的三大步骤,分为设置环境、执行测试和清除环境。

在python的unittest测试框架中对应 setup()、test_XXX()和teardown();在Java的JUnit测试框架中对应@before、@test和@after。

在这里我特别需要指出,在设置环境的时候我们也需要清除环境,这是为什么呢?各位都知道我们的自动化测试程序往往是一次执行多个测试用例的,步骤中设置环境和清除环境的目的是保证这个测试用例能够在正确的环境下被执行并且该测试用例执行完毕不能够对其他测试用例的执行带来影响。

我们试想一下如果这个程序在这个测试执行的时候发生了意外的中断,没有进行清除环境的操作,这样势必会带来下一个程序的执行。比如在上面这个案例清除环境为点击图一的【清除】按钮,清除系统数据库的数据。

如果测试程序在图二成功注册了一个用户,在点击【注册】按钮的时候出现了错误,这样下一个程序用同样的用户名进行注册的时候就会出错,所以要在测试程序中也加入点击图一的【清除】按钮,清除系统数据库的数据操作。

这样有同学就会问如果这样为什么还要最后清除操作呢,我们让所有的清除操作都发在设置环境中进行操作就可以了,答案是我们的自动化测试程序要保证在测试完毕交付后的环境是干净的,可以让下一个使用这个环境的同学正常使用,每一个程序都可能是最后一个程序,所以在最后就必须删除。

下面是一段对于案例使用Appium技术和unittest框架的测试代码:

#!/usr/bin/env python

#coding=utf-8

import unittest

from appium.webdriver.common.touch_action import TouchAction

from appium import webdriver

class demo4test(unittest.TestCase):

def setUp(self):

self.desired_caps = {}

self.desired_caps['platformName'] = 'Android'

self.desired_caps['platformVersion'] = '6.0'

self.desired_caps['deviceName'] = 'Android Emulator'

self.desired_caps['appPackage'] = 'com.example.demo4'

self.desired_caps['appActivity'] = '.MainActivity'

self.driver = webdriver.Remote('http://localhost:4723/wd/hub', self.desired_caps)

self.driver.find_element_by_id("com.example.demo4:id/button3").click()

def test_APP(self):

self.username = "Jerry"

self.password = "123456"

self.driver.find_element_by_id("com.example.demo4:id/button2").click()

self.driver.find_element_by_id("com.example.demo4:id/username1").send_keys("")

self.driver.find_element_by_id("com.example.demo4:id/username1").send_keys(self.username)

self.driver.find_element_by_id("com.example.demo4:id/password1").send_keys("")

self.driver.find_element_by_id("com.example.demo4:id/password1").send_keys(self.password)

self.driver.find_element_by_id("com.example.demo4:id/button11").click()

self.driver.find_element_by_id("com.example.demo4:id/username").send_keys("")

self.driver.find_element_by_id("com.example.demo4:id/username").send_keys(self.username)

self.driver.find_element_by_id("com.example.demo4:id/password").send_keys("")

self.driver.find_element_by_id("com.example.demo4:id/password").send_keys(self.password)

self.driver.find_element_by_id("com.example.demo4:id/button1").click()

self.acut_result = self.driver.find_element_by_id("com.example.demo4:id/welcomeinfo").text

self.assertEqual(self.acut_result,"Welcome "+self.username)

def tearDown(self):

if (not (self.driver.find_element_by_id("com.example.demo4:id/logout"))):

self.driver.find_element_by_id("com.example.demo4:id/logout").click() self.driver.find_element_by_id("com.example.demo4:id/button3").click()

self.driver.quit()

if __name__=='__main__':

#构造测试集

suite=unittest.TestSuite()

suite.addTest(demo4test("test_APP"))

#运行测试集合

runner=unittest.TextTestRunner()

runner.run(suite)

在这个代码中def setUp(self)为初始化环境,这里结尾代码"self.driver.find_element_by_id(“com.example.demo4:id/button3”).click()"为点击图一的【清除】键;def test_APP(self):为执行测试部分;def tearDown(self):为清除环境部分。

2)接下来我们介绍一下自动化测试的三大小步骤为:获取对象、操作对象和断言。

在上述代码中self.driver.find_element_by_id(“XXX”)为获取对象(我发现,不管是利用Appium还是利用UIAutomation或Robertium都可以使用by_id来实现原生态APP控件的定位)、.click(),.send_keys(self.username)等为进行操作、self.assertEqual(self.acut_result,"Welcome "+self.username)为断言。

3)最后我们来介绍一下接口自动化测试的接口自动化测试的四大小步骤为:组织协议包、发送协议包、接受协议包和分析协议包。

这里我们以测试一个基于WEB的登录程序为例。

#!/usr/bin/env python

#coding:utf-8

import unittest,requests

class CheckUserUnit(unittest.TestCase):

def setUp(self):

self.correctusername="jerry"

self.correctpassword="123456"

self.discorrectusername="tom"

self.discorrectpassword="000000"

self.url="http://localhost:8080/sec/20/jsp/index.jsp"

#错误的用户名,正确的密码

def test_login_eucp(self):

payload={"name": self.discorrectusername,"password": self.correctpassword}

data = requests.post(self.url,data=payload)

self.assertEqual("200",str(data.status_code))

self.assertIn("登录</a>失败",str(data.text))

#正确的用户名,错误的密码

def test_login_cuep(self):

payload={"name": self.correctusername,"password": self.discorrectpassword}

data = requests.post(self.url,data=payload)

self.assertEqual("200",str(data.status_code))

self.assertIn("登录</a>失败",str(data.text))

#错误的用户名,错误的密码

def test_login_euep(self):

payload={"name":self.discorrectusername,"password":self.discorrectpassword}

data = requests.post(self.url,data=payload)

self.assertEqual("200",str(data.status_code))

self.assertIn("登录</a>失败",str(data.text))

#正确的用户名,正确的密码

def test_login_cucp(self):

payload={"name": self.correctusername,"password":self.correctpassword}

data = requests.post(self.url,data=payload)

self.assertEqual("200",str(data.status_code))

self.assertIn("登录成功",str(data.text))

if __name__=='__main__':

#构造测试集

suite=unittest.TestSuite()

suite.addTest(CheckUserUnit("test_login_eucp"))

suite.addTest(CheckUserUnit("test_login_cuep"))

suite.addTest(CheckUserUnit("test_login_euep"))

suite.addTest(CheckUserUnit("test_login_cucp"))

#运行测试集合

runner=unittest.TextTestRunner()

runner.run(suite)

同样在这里def setUp(self)为初始化环境;def test_XXX(self):为执行测试部分;def tearDown(self):为清除环境部分。我们以"正确的用户名,正确的密码"的代码为例进行介绍。

"payload={"name": self.correctusername,"password":self.correctpassword}"为组织协议包;

"data = requests.post(self.url,data=payload)"为发送协议包和接受协议包

"self.assertEqual("200",str(data.status_code))""self.assertIn("登录成功",str(data.text)) "为分析协议包"

下面有我近几年的收集和整理,整体是围绕着【软件测试】来进行整理的,主体内容包含:python自动化测试专属视频、Python自动化详细资料、全套面试题等知识内容。
在这里插入图片描述在这里插入图片描述
对于软件测试的的朋友来说应该是最全面最完整的面试备战仓库,为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个仓库也已经帮助了很多的软件测试的学习者,希望也能帮助到你

关注微信公众号【程序员二黑】即可领取Python自动化测试超硬核资源

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录: 第1章 软件危机与软件工程 1. 1 软件危机 1. 1. 1 什么是软件危机 1. 1. 2 软件危机内在的原因 1. 1. 3 软件工程与软件危机的解决 1. 2 软件质量与可靠性 1. 2. 1 软件质量因素和质量特性 1. 2. 2 软件可靠性 1. 3 软件工程方法论--CMM模型 1. 3. 1 SQA计划 1. 3. 2 ISO 9000质量保证体系 1. 3. 3 CMM模型 第2章 软件工具和面向对家软件工程 2. 1 传统软件工程的困境及解决 2. 1. 1 传统软件工程面临的困境浅析 2. 1. 2 软件工具和再工程环境 2. 1. 3 面向对象的软件工程 2. 2 经典的软件工程与建模工具 2. 2. 1 业务调查阶段 2. 2. 2 需求定义阶段 2. 2. 3 总体设计阶段 2. 2. 4 详细设计阶段 2. 2. 5 程序生成阶段 2. 3 Panorama自动化测试工具和支撑环境 2. 3. 1 系统特点 2. 3. 2 采用领先的技术 2. 3. 3 Panorama工具系列和功能 第3章 软件工程范畴中软件测试的一般性理论 3. 1 基本概念 3. 1. 1 软件测试基础 3. 1. 2 静态方法和动态方法 3. 1. 3 黑盒测试和白盒测试 3. 1. 4 软件测试的步骤 3. 1. 5 测试阶段的信息流 3. 2 单元测试 3. 2. 1 单元测试的考虑 3. 2. 2 单元测试的过程 3. 3 集成测试 3. 3. 1 非增式测试 3. 3. 2 增式测试 3. 3. 3 不同集成测试策略的比较 3. 4 确认测试 3. 4. 1 确认测试准则 3. 4. 2 配置审查 3. 5 系统测试 3. 5. 1 恢复测试 3. 5. 2 安全测试 3. 5. 3 强度测试 3. 5. 4 性能测试 3. 6 验收测试 3. 6. 1 验收测试的范围 3. 6. 2 软件配置及文档资料 3. 7 调试 3. 8 面向对象的软件测试 3. 8. 1 在OO语境中的单元测试 3. 8. 2 在OO语境中的集成测试 3. 8. 3 在OO语境中的确认测试 第4章 软件测试用例的设计 4. 1 黑盒测试法和测试用例的设计 4. 1. 1 等价类划分 4. 1. 2 边界值分析 4. 1. 3 因果图 4. 1. 4 比较测试 4. 2 白盒测试法和测试用例的设计 4. 2. 1 基本概念 4. 2. 2 逻辑覆盖 4. 2. 3 路径分析 4. 3 针对专门环境和应用的测试 4. 3. 1 GUI测试 4. 3. 2 客户服务器体系结构的测试 4. 3. 3 实时系统的测试 第5章 软件工程及测试的难点和ISA的相关解决 5. 1 新系统开发支持 5. 1. 1 支持新系统设计 5. 1. 2 减少故障和编码风险 5. 1. 3 帮助软件工程师解决调试问题 5. 1. 4 源代码级程序终止和实时运行错误定位 5. 2 为已有软件系统提供修改设计. 测试和质量保障支持 5. 2. 1 有效率的模块级源文件编辑和安全的代码修改 5. 2. 2 帮助代码理解. 检查和通过 5. 2. 3 为单元和系统集成测试增加有序性 5. 2. 4 基于多重度量的复杂性分析的测试计划 5. 2. 5 测试覆盖分析与工程文件(. mak)驱动代码插装 5. 2. 6 有效的未测试路径(或段)的测试和再测试 5. 2. 7 节省时间的模块级再测试 5. 2. 8 有效的花费和自动的系统级再测试 5. 2. 9 面向对象的软件质量度量的测量 5. 2. 10 在Windows上基于GUI的复原测试 5. 3 再工程支持 5. 3. 1 系统结构分析 5. 3. 2 系统的类/过程分析 5. 3. 3 系统过程的逻辑分析和流程图化 5. 3. 4 系统控制流和Cyclomatic度量复杂性分析 5. 3. 5 系统数据分析 5. 3. 6 系统性能分析 5. 3. 7 可联机访问的文档手册和报告自动生成 5. 4 其他 5. 4. 1 工程管理 5. 4. 2 训练新成员 5. 4. 3 定制系统说明和验收评估 第6章 软件自动化测试的质量规范和应量 6. 1 Panorama自动化测试软件质量保障体系特点 6. 1. 1 Panrama测试覆盖的特点 6. 1. 2 测试用例和代码的对应分析 6. 1. 3 测试用例的最小化 6. 1. 4 意外结束的定位 6. 1. 5 复杂性分析 6. 1. 6 测试结果和程序逻辑的图形表达 6. 1. 7 用户友好的界面 6. 2 Panorama自动测试软件提供的质量保障体系 6. 2. 1 软件质量保障度量 6. 2. 2 Panorama软件质量保障度量的含义 6. 2.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值