软件自动化测试的步骤

简介: 软件自动化测试的步骤

啄木鸟软件测试培训网:www.3testing.com


本文所用到的案例:

 image.png     image.png      

 图一:登录首页                                  图二:注册页                

image.png

图三:登录成功页


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


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

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


正文部分

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


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


1)我们先来考虑软件自动化测试的三大步骤,分为设置环境、执行测试和清除环境。在pythonunittest测试框架中对应setup()test_XXX()teardown();在JavaJUnit测试框架中对应@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()”为点击图一的【清除】键;deftest_APP(self):为执行测试部分;def tearDown(self):为清除环境部分。


2)接下来我们介绍一下自动化测试的三大小步骤为:获取对象、操作对象和断言。在上述代码中self.driver.find_element_by_id("XXX")为获取对象(我发现,不管是利用Appium还是利用UIAutomationRobertium都可以使用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)) ”为分析协议包”


顾翔凡言:

软件的基本功能质量应该主要由开发人员负责,测试人员的主要责任在于非功能质量,比如:性能、易用性、可靠性。以及边缘问题及深层问题,边缘问题及深层问题主要靠探索式测试完成

目录
相关文章
|
1天前
|
数据挖掘
优化现金流:CRM回款自动化的关键步骤
在当今商业环境中,CRM系统已成为企业与客户互动的核心平台。回款自动化作为其重要功能,通过集成支付平台、自动化发票生成、智能提醒和数据分析等手段,显著减少人工操作错误,加快资金周转,提升现金流管理能力,降低成本并增强客户满意度。这不仅提高了企业的财务效率,还增强了市场竞争力。企业应积极拥抱这一变革,优化CRM系统,实现财务管理的智能化,从而在竞争中占据有利地位。
|
21天前
|
缓存 监控 安全
公司电脑监控软件的 Gradle 构建自动化优势
在数字化办公环境中,公司电脑监控软件面临代码更新频繁、依赖管理和构建复杂等挑战。Gradle 构建自动化工具以其强大的依赖管理、灵活的构建脚本定制及高效的构建缓存与增量构建特性,显著提升了软件开发效率和质量,支持软件的持续更新与优化,满足企业对员工电脑使用情况的监控与管理需求。
34 3
|
1月前
|
运维 jenkins Java
Jenkins 自动化局域网管控软件构建与部署流程
在企业局域网管理中,Jenkins 作为自动化工具,通过配置源码管理、构建及部署步骤,实现了高效、稳定的软件开发与部署流程,显著提升局域网管控软件的开发与运维效率。
40 5
|
2月前
|
测试技术 持续交付
探索自动化测试在软件质量保证中的关键作用
本文深入探讨了自动化测试在现代软件开发生命周期中的重要性,以及它是如何成为确保软件产品质量的不可或缺的一环。通过分析自动化测试的优势、挑战和最佳实践,本文旨在为读者提供对自动化测试全面而深刻的理解,从而帮助他们在实际工作中更有效地应用自动化测试策略。
35 2
|
2月前
|
JavaScript 安全 编译器
TypeScript 与 Jest 测试框架的结合使用,从 TypeScript 的测试需求出发,介绍了 Jest 的特点及其与 TypeScript 结合的优势,详细讲解了基本测试步骤、常见测试场景及异步操作测试方法
本文深入探讨了 TypeScript 与 Jest 测试框架的结合使用,从 TypeScript 的测试需求出发,介绍了 Jest 的特点及其与 TypeScript 结合的优势,详细讲解了基本测试步骤、常见测试场景及异步操作测试方法,并通过实际案例展示了其在项目中的应用效果,旨在提升代码质量和开发效率。
52 6
|
2月前
|
jenkins 测试技术 持续交付
自动化测试框架的构建与优化:提升软件交付效率的关键####
本文深入探讨了自动化测试框架的核心价值,通过对比传统手工测试方法的局限性,揭示了自动化测试在现代软件开发生命周期中的重要性。不同于常规摘要仅概述内容,本部分强调了自动化测试如何显著提高测试覆盖率、缩短测试周期、降低人力成本,并促进持续集成/持续部署(CI/CD)流程的实施,最终实现软件质量和开发效率的双重飞跃。通过具体案例分析,展示了从零开始构建自动化测试框架的策略与最佳实践,包括选择合适的工具、设计高效的测试用例结构、以及如何进行性能调优等关键步骤。此外,还讨论了在实施过程中可能遇到的挑战及应对策略,为读者提供了一套可操作的优化指南。 ####
|
2月前
|
敏捷开发 安全 测试技术
掌握单元测试:确保代码质量的关键步骤
单元测试是确保代码质量、提升可维护性和可靠性的重要手段。本文介绍了单元测试的基本概念、重要性及最佳实践,包括测试驱动开发(TDD)、保持测试独立性、使用断言库和模拟依赖等,旨在帮助开发者掌握单元测试技巧,提高开发效率。
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
自动化测试的新篇章:利用AI提升软件质量
【10月更文挑战第35天】在软件开发的海洋中,自动化测试犹如一艘救生艇,它帮助团队确保产品质量,同时减少人为错误。本文将探索如何通过集成人工智能(AI)技术,使自动化测试更加智能化,从而提升软件测试的效率和准确性。我们将从AI在测试用例生成、测试执行和结果分析中的应用出发,深入讨论AI如何重塑软件测试领域,并配以实际代码示例来说明这些概念。
70 3
|
2月前
|
监控 网络协议 安全
员工网络监控软件:PowerShell 在网络监控自动化中的应用
在数字化办公环境中,企业对员工网络活动的监控需求日益增长。PowerShell 作为一种强大的脚本语言,能够有效实现员工网络监控自动化。本文介绍了如何使用 PowerShell 获取网络连接信息、监控特定网址的访问情况,并生成自动化报告,帮助企业高效管理员工网络活动,确保网络安全和合规性。
53 0
|
3月前
|
Java 测试技术 C#
自动化测试之美:从Selenium到Appium
【10月更文挑战第3天】在软件开发的海洋中,自动化测试如同一艘航船,引领着质量保证的方向。本文将带你领略自动化测试的魅力,从Web端的Selenium到移动端的Appium,我们将一探究竟,看看这些工具如何帮助我们高效地进行软件测试。你将了解到,自动化测试不仅仅是技术的展示,更是一种提升开发效率和产品质量的智慧选择。让我们一起启航,探索自动化测试的世界!

热门文章

最新文章