关闭

自动化测试框架思路简单分享

发表于:2015-8-24 08:44

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:chenhengjie123    来源:51Testing软件测试网采编

  今天 QQ 上一位群友询问我怎么做关键字驱动的框架。鉴于我最近这1年左右的时间都是在公司的一个自动化测试框架项目,也还没分享过这方面的思路和感受,所以在这里分享一下。
  工作经验有限,有些地方说的可能并不对,大家找到有问题的地方欢迎提出,我会立即更正。
  现在有许多的自动化测试框架可以使用,如 appium,xUnit,Cucumber 等,但很多时候单纯使用其中一个框架并不是十分好用,而且很多的框架名词,如 BDD,关键字驱动等也会让一些想接触这方面的人感到有点 Hold 不住。其实一个完整、实用的框架是有规律可循的,而且也并不是特别困难。
  下面的大部分思路来自于 芈峮 大神的 《iOS 测试指南》 中 8.6 自动化测试框架剖析 。看完这里后我觉得我终于把心中的混乱理清了。因此我也在此介绍给大家,理清一些混乱的地方。
  测试框架分层
  一个完整的测试框架是怎样的?
  例如我们写 appium 的测试用例,如果只是做 Demo 的话我们会直接使用 WebDriver API 来写。这时候一个用例长这样:
import os
from time import sleep
from appium import webdriver
if __name__ == '__main__':
# Returns abs path relative to this file and not cwd
PATH = lambda p: os.path.abspath(
os.path.join(os.path.dirname(__file__), p)
)
# init driver, open session
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '4.2'
desired_caps['deviceName'] = 'Android Emulator'
desired_caps['app'] = PATH(
'../../../sample-code/apps/ApiDemos/bin/ApiDemos-debug.apk'
)
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# execute some action
els = driver.find_elements_by_android_uiautomator("new UiSelector().clickable(true)")
# check if result is as expected
if len(els) != 12:
print "Case Failed. There should be 12 elements but only {} elements exist".format(len(els))
else:
print "Case Passed."
# end the session
driver.quit()
  然后用例数目比较多了,每个 case 里面都要启动 appium 太麻烦了,而且测试结果也不够好看,所以我们开始使用一些单元测试框架,使用它们的 setUp,tearDown 或者测试报告。此时用例会长这样:
import os
from time import sleep
import unittest
from appium import webdriver
# Returns abs path relative to this file and not cwd
PATH = lambda p: os.path.abspath(
os.path.join(os.path.dirname(__file__), p)
)
class SimpleAndroidTests(unittest.TestCase):
def setUp(self):
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '4.2'
desired_caps['deviceName'] = 'Android Emulator'
desired_caps['app'] = PATH(
'../../../sample-code/apps/ApiDemos/bin/ApiDemos-debug.apk'
)
self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
def tearDown(self):
# end the session
self.driver.quit()
def test_check_clickable_element_count(self):
els = self.driver.find_elements_by_android_uiautomator("new UiSelector().clickable(true)")
self.assertEqual(12, len(els))
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(SimpleAndroidTests)
unittest.TextTestRunner(verbosity=2).run(suite)
  再后面我们要写更多的用例,单靠做自动化测试的几个人 hold 不住了,需要让一些技术方面不那么强的人来做。为了让他们容易上手而又不至于搞乱我们的框架,我们会把用例再封装,做成表格或者 BDD 这种不会代码的人也能比较容易写用例和读用例的形式。此时用例会长这样 (Cucumber):
  Feature: Simple android test
  Do some sample operations with android application
  Scenario: Check clickable element count
  When I opened the application
  Then 12 clickable buttons should occur
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号