执行test_case报TypeError: 'NoneType' object is not subscriptable
来源:5-12 多线程、unittest、启动服务逻辑串联

精慕门8475099
2019-05-22
#coding=utf-8
import sys
sys.path.append("…")
import unittest
import HTMLTestRunner
import threading
from util.server import Server
from appium import webdriver
import time
from business.login_business import LoginBusiness
class ParameTestCase(unittest.TestCase):
def init(self,methodName=‘runTest’,parame=None):
super(ParameTestCase,self).init(methodName)
self.parame = parame
global parames
parames = parame
class CaseTest(ParameTestCase):
@classmethod
def setUpClass(cls):
global parames
print(‘setUpClass------>’,parames)
print(LoginBusiness(parames))
cls.login_business = LoginBusiness(parames)
def setUp(self):
print('setup...')
def test_01(self):
print('testcase的参数',parames)
self.login_business.login_sucess()
#self.assertNotEqual(1,2)
def test_02(self):
self.assertNotEqual(1,1,"数据错误")
def tearDown(self):
print('teardown..')
@classmethod
def tearDownClass(cls):
print('teardownclass...')
def appium_init():
server = Server()
server.main()
def get_suite(i):
suite = unittest.TestSuite()
#suite.addTest(CaseTest(‘test_02’))
suite.addTest(CaseTest(‘test_01’,parame=i))
print(“参数中”,i)
unittest.TextTestRunner().run(suite)
# html_file = “D:/python/apptest/report/report”+str(i)+".html"
# fp = open(html_file, “wb”)
# HTMLTestRunner.HTMLTestRunner(stream=fp).run(suite)
if name == “main”:
# appium_init()
# print(get_suite(0))
threads = []
for i in range(1):
t = threading.Thread(target=get_suite, args=(i,))
threads.append(t)
for j in threads:
j.start()
执行报错如下:
参数中 0
setUpClass------> 0
0
this is android_driver: 0
E
ERROR: setUpClass (main.CaseTest)
Traceback (most recent call last):
File “D:\python\apptest\case\test_case.py”, line 23, in setUpClass
print(LoginBusiness(parames))
File “…\business\login_business.py”, line 6, in init
self.login_handle = LoginHandle(i)
File “…\handle\login_handle.py”, line 6, in init
self.loginpage = LoginPage(i)
File “…\page\login_page.py”, line 7, in init
self.driver = base_driver.android_driver(i)
File “…\base\base_driver.py”, line 12, in android_driver
devices = write_file.get_value(‘user_info_’+str(i),‘deviceName’)
File “…\util\write_appium_command.py”, line 18, in get_value
value = data[key][port]
TypeError: ‘NoneType’ object is not subscriptable
Ran 0 tests in 0.003s
FAILED (errors=1)
[Finished in 1.0s]
base_driver里代码如下:
#coding=utf-8
import sys
sys.path.append(“D:/python/apptest”)
import time
from appium import webdriver
from util.write_appium_command import WriteAppiumCommand
class BaseDriver:
""“docstring for BaseDriver”""
def android_driver(self,i):
print(“this is android_driver:”,i)
write_file = WriteAppiumCommand()
devices = write_file.get_value(‘user_info_’+str(i),‘deviceName’)
port = write_file.get_value(‘user_info_’+str(i),‘port’)
print(devices,port)
capabilities = {#‘deviceName’: ‘TEX9K18104911115’,
‘deviceName’: devices,
‘automationName’: ‘uiautomator2’,
‘noReset’: True,
‘noSign’: True,
‘appPackage’: ‘com.cmi.jegotrip’,
‘platformName’: ‘android’,
‘appActivity’: ‘com.cmi.jegotrip.ui.LauncherActivity’,
#‘platformVersion’: ‘7.0’
‘platformVersion’: ‘5.1.1’
}
driver = webdriver.Remote(‘http://localhost:’+port+’/wd/hub’, capabilities)
time.sleep(10)
return driver
求救。。。
2回答
-
devices = write_file.get_value(‘user_info_’+str(i),‘deviceName’)
File “…\util\write_appium_command.py”, line 18, in get_value
value = data[key][port]你看你启动然后去获取值的时候出错了,你去看你设备信息里面有值么?把哪个打印出来。应该是空的。
012019-05-23 -
精慕门8475099
提问者
2019-05-23
确实是没获取到设备信息,老师,我打开appium_init()的时候,为啥appium后启动,get_suite()先运行了。。
if __name__ == "__main__":
appium_init()
# print(get_suite(0))
threads = []
for i in range(1):
t = threading.Thread(target=get_suite, args=(i,))
threads.append(t)
for j in threads:
j.start()
server.py 代码如下:
022020-01-08
相似问题
回答 1