计算器测试unittest代码
import pandas
import parameterized
import unittest
from appium import webdriver
from time import sleep
# 获取excel数据
data = pandas.read_excel('G:\Java\测试文件夹\cal.xls',
sheet_name='Sheet1',
names=['num1', 'operator', 'num2', 'TrueRes'],
dtype={'num1': str, 'operator': str, 'num2': str, 'TrueRes': str},
header=None)
# 转成列表
data = data.values.tolist()
driver = None
class Test(unittest.TestCase):
def setUp(self) -> None:
device = {}
device['deviceName'] = '127.0.0.1:62026'
device['platformName'] = 'Android'
device['platformVersion'] = '7.1.2'
device['appPackage'] = 'com.android.calculator2'
device['appActivity'] = '.Calculator'
# 指定每次运行测试前不重新安装 App
device['noReset'] = True
# 输入中文字符
device['unicodeKeyboard'] = True
device['resetKeyboard'] = True
global driver
driver = webdriver.Remote('http://localhost:4723/wd/hub', device)
def tearDown(self) -> None:
global driver
sleep(3)
driver.quit()
# parameterized参数化,就是将列表中所有数据都循环一遍
@parameterized.parameterized.expand(data)
def test01(self, num1, operator, num2, TrueRes):
global driver
# 将+-*/转换成appnium中的id
if operator == "+":
operatorId = "com.android.calculator2:id/plus"
elif operator == "-":
operatorId = "com.android.calculator2:id/minus"
elif operator == "*":
operatorId = "com.android.calculator2:id/mul"
else:
operatorId = "com.android.calculator2:id/div"
# 将第1个多位数拆分进行输入
for i in num1:
driver.find_element_by_id("com.android.calculator2:id/digit" + i).click()
# 输入完第一个数字后,输入运算符
driver.find_element_by_id(operatorId).click()
# 将第2个多位数拆分进行输入
for i in num2:
driver.find_element_by_id("com.android.calculator2:id/digit" + i).click()
# 获取计算结果
driver.find_element_by_id("com.android.calculator2:id/equal").click()
res=driver.find_element_by_class_name('android.widget.EditText').text
# 断言
self.assertEqual(res, TrueRes)
if __name__ == '__main__':
unittest.main(verbosity=2)
生成报告代码
import unittest
import time
from Commonlib import HTMLTestRunner
suite=unittest.TestSuite()
tests=unittest.defaultTestLoader.discover("G:\\Java\\Appinum_Demo\\Testcase",pattern="testcase.py")
suite.addTests(tests)
now=time.strftime("%Y%m%d %H%M%S",time.localtime())
reportFile="./"+now+"_result.html"
fp=open(reportFile,'wb')
runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title=u'App测试报告',description=u'计算器测试报告')
runner.run(suite)
fp.close()
利用以下
HTMLTestRunner.py
文件生成报告
"""
A TestRunner for use with the Python unit testing framework. It
generates a HTML report to show the result at a glance.
The simplest way to use this is to invoke its main method. E.g.
import unittest
import HTMLTestRunner
... define your tests ...
if __name__ == '__main__':
HTMLTestRunner.main()
For more customization options, instantiates a HTMLTestRunner object.
HTMLTestRunner is a counterpart to unittest's TextTestRunner. E.g.
# output to a file
fp = file('my_report.html', 'wb')
runner = HTMLTestRunner.HTMLTestRunner(
stream=fp,
title='My unit test',
description='This demonstrates the report output by HTMLTestRunner.'
)
# Use an external stylesheet.
# See the Template_mixin class for more customizable options
runner.STYLESHEET_TMPL = ''
# run the test
runner.run(my_test_suite)
------------------------------------------------------------------------
Copyright (c) 2004-2007, Wai Yip Tung
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name Wai Yip Tung nor the names of its contributors may be
used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
"""
'''# URL: http://tungwaiyip.info/software/HTMLTestRunner.html'''
__author__ = "Keynes zhao"
__version__ = "0.8.2"
"""
Change History
Version 0.8.2
* Show output inline instead of popup window (Viorel Lupu).
Version in 0.8.1
* Validated XHTML (Wolfgang Borgert).
* Added description of test classes and test cases.
Version in 0.8.0
* Define Template_mixin class for customization.
* Workaround a IE 6 bug that it does not treat
%(heading)s
%(report)s
%(ending)s