美文网首页测试之路
#Python#一个简单的Appium自动化测试//unitte

#Python#一个简单的Appium自动化测试//unitte

作者: 我叫GTD | 来源:发表于2018-05-23 00:16 被阅读3次

    前段时间自己练手作的,练习Appium,当然不能放过calculator。话不多说,要先有个简单的框架,上图:


    麻雀虽小,五脏俱全

    报告和测试用例脚本要分开放(非强制,但最好)。只写了一个测试用例脚本,简单的测试加减乘除,如果更复杂了,可以在test_case下细分不同用处的脚本。对于相同的action,完全可以在test_case的同级目录下创建common文件夹,来放置公用的一些类以及函数。类似功能的代码重写是严重浪费生产力的。

    # -*- coding: utf-8 -*-
    import time
    import os
    import unittest
    import HTMLTestRunner
    from appium import webdriver
    
    
    class CalculateTest(unittest.TestCase):
    
        @classmethod # 只初始化一次,并不是每次用例执行都进行初始化
        def setUpClass(cls):
            # 毕竟练习,舍不得真刀实枪的用自己手机,下面是初始化的一些配置
            desire_caps = dict()
            desire_caps['platformName'] = 'Android'
            desire_caps['platformVersion'] = '19'
            desire_caps['deviceName'] = '192.168.99.100:5555'
            desire_caps['appPackage'] = 'com.android.calculator2'
            desire_caps['appActivity'] = '.Calculator'
            cls.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desire_caps)
    
        # 需要注意如果输入99的话,要进行两次‘9’.click(),计算器是点击,不是输入操作,当然也需要测试文本框是否接受输入操作,但本节不讲
        def test_add(self):
            self.driver.find_element_by_name('9').click()
            self.driver.find_element_by_id('com.android.calculator2:id/plus').click()
            self.driver.find_element_by_name('1').click()
            self.driver.find_element_by_name('=').click()
            result = self.driver.find_element_by_class_name('android.widget.EditText').text
            # 设置断言,不然不管对错,最后得出的报告统统PASS,那就尴尬了。text的属性为str,断言内容在这前后格式要相同,不然得出的报告全部FAIL,那也尴尬了。
            self.assertEqual(result, str(9+1)) 
            self.driver.find_element_by_name('CLR') # 最后一定要清空,为下一个用例作准备
    
        def test_substract(self):
            self.driver.find_element_by_name('9').click()
            self.driver.find_element_by_id('com.android.calculator2:id/minus').click()
            self.driver.find_element_by_name('1').click()
            self.driver.find_element_by_name('=').click()
            result = self.driver.find_element_by_class_name('android.widget.EditText').text
            self.assertEqual(result, str(9-1))
            self.driver.find_element_by_name('CLR')
    
        def test_multi(self):
            self.driver.find_element_by_name('9').click()
            self.driver.find_element_by_id('com.android.calculator2:id/mul').click()
            self.driver.find_element_by_name('9').click()
            self.driver.find_element_by_name('=').click()
            result = self.driver.find_element_by_class_name('android.widget.EditText').text
            self.assertEqual(result, str(9*9))
            self.driver.find_element_by_name('CLR')
    
        def test_div(self):
            self.driver.find_element_by_name('9').click()
            self.driver.find_element_by_id('com.android.calculator2:id/div').click()
            self.driver.find_element_by_name('3').click()
            self.driver.find_element_by_name('=').click()
            result = self.driver.find_element_by_class_name('android.widget.EditText').text
            self.assertEqual(result, str(int(9/3)))
            self.driver.find_element_by_name('CLR').click()
    
        @classmethod
        def tearDownClass(cls): # 不要忘记收尾。
            cls.driver.quit()
    
    
    if __name__ == '__main__':
        cal_suit = unittest.makeSuite(CalculateTest, 'test') # 构造testsuit,第一个参数为类名称,第二个参数为类中每个testcase的前缀名
        path = os.path.abspath(os.path.dirname(os.getcwd())) # 此脚本的父级目录
        report_time = time.strftime('%Y%m%d', time.localtime())
        report_name = path + '\\report\\' + report_time + '-report.html' # 报告保存路径及名称
        with open(report_name, 'wb') as fp:
            # 生成报告未HTML格式,
            runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'手机计算器测试报告', description=u'用例执行情况') 
            runner.run(cal_suit) # 开始执行
    

    需要注意的事项在注释中已经声明了。操作起来还是较容易的。如果从无到有开始作的话,构建环境应该占一部分时间。这是很少的测试用例脚本,如果很多的话,一定要事先在脑子里构建一个框架,也画出来,那些函数会重用,哪些之前写过等等,先把框架构建好,后面写起来才会顺风顺水。

    相关文章

      网友评论

        本文标题:#Python#一个简单的Appium自动化测试//unitte

        本文链接:https://www.haomeiwen.com/subject/rhkljftx.html