测试框架:
具体代码框架:
以下依次展示每部分的代码编写:
bussis/login-test:
import time
from selenium.webdriver.common.by import By
from config.commen import caps
def login_test(username,password):
driver=caps()
driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/launch_rect_skip").click()
# driver.find_element_by_id("com.to8to.housekeeper:id/launch_rect_skip").click()
time.sleep(2)
#选择我的
# driver.find_element(by=By.CLASS_NAME,value='android.widget.ImageView').click()
# son='resourceId("com.to8to.housekeeper:id/ttab_own").childSelector(className("android.widget.ImageView"))'
# driver.find_element_by_android_uiautomator(son).click()
#最后选择Xpath定位到的 x=955 y=2099
# driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.view.ViewGroup/android.view.ViewGroup[5]/android.widget.ImageView").click()
driver.tap(955,2099)
#选择立即登录
driver.find_element(by=By.CLASS_NAME,value="android.widget.TextView").click()
# driver.find_element_by_class_name("android.widget.TextView").click()
# #删除手机号
# driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_img_reset_account").click()
# #输入手机号
# driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_edit_account").send_keys("15736418790")
# #获取验证码
# driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_txt_countdown").click()
#点击密码登录
# driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_txt_changed_login").click()
time.sleep(1)
#输入手机号
driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_edit_account").send_keys(username)
#输入密码
driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_edit_password").send_keys(password)
#勾选协议
driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_cb_left").click()
#点击登录
driver.find_element(by=By.ID,value="com.to8to.housekeeper:id/module_login_btn_commit").click()
try:
driver.find_element_by_xpath('//*[contains(@text,"个人主页")]')
except:
print("登录失败")
return False
else:
print("登录成功")
return True
# driver.quit()
if __name__ == '__main__':
login_test("15736418790","test666#")
config/commen.py:
import os
from time import sleep
import yaml
from selenium.webdriver.common.by import By
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
def caps():
#获取配置文件的目录
yaml_dir=os.path.dirname(__file__)#当前文件所在目录
#获取配置文件的完整路径
yaml_path=os.path.join(yaml_dir,'config.yaml')
#打开配置文件,读取内容
yaml_content=open(yaml_path,'r',encoding='utf-8')
#解析配置文件的内容
data= yaml.load(yaml_content,Loader=yaml.FullLoader)
yaml_content.close()
caps = {}
# caps["platformName"] = data['platformName']
# caps["platformVersion"] = data['platformVersion']
# caps["deviceName"] = data['deviceName']
caps["platformName"] = "Android"
caps["appium:platformVersion"] = "10"
caps["appium:deviceName"] = "e0383ead"
caps["appPackage"] = "com.to8to.housekeeper"
caps["appActivity"] = "com.to8to.housekeeper.TLaunchActivity"
caps["noReset"] = True
caps["ensureWebviewsHavePages"] = True
caps["nativeWebScreenshot"] = True
caps["anewCommandTimeout"] = 3600
caps["connectHardwareKeyboard"] = True
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)
driver.implicitly_wait(6)
return driver
if __name__ == '__main__':
caps()
config/config.yaml:
platformName:Android
platformVersion:10
deviceName:e0383ead
data/login_data.csv:
15736418790,test666#,True
1573641879,test666#,False
15736418790,test666,False
15736418792,test666,False
data/get-csv:
def get_csv_all(csv_file):
with open(csv_file,'r',encoding='utf-8')as f:
lines=f.readlines()
print(lines)
return lines
if __name__ == '__main__':
get_csv_all('./login.data.csv')
report查看报告:鼠标右击
testcase/login_test.py:
import unittest
from bussis.login_test import login_test
from data.get_csv import get_csv_all
class Testlogin(unittest.TestCase):
#测试开始前执行
def setUp(self):
print("开始测试")
#测试开始后执行
def tearDown(self):
print("结束测试")
def test_login(self):
#获取文件的路径
csv_file='../data/login.data.csv'
#读取文件内容
data=get_csv_all(csv_file)
for i in range(len(data)):#数据驱动,直接取data的长度去进行循环
data1=data[i].split(',')#讲一组数据用逗号分隔成多组数据
try:
if data1[2].strip()=='true':
self.assertTrue(login_test(data1[0],data1[1]))
#strip函数去除后面的特殊字符,本文中去除\n
else:
self.assertFalse(login_test(data1[0],data1[1]))
except:
print("本次测试未通过")
else:
print("本次测试通过")
if __name__ == '__main__':
Testlogin()
run/BSTestRunner.py:
下载后将BSTestRunner.py文件复制到pycharm里面
run/runner.py:
import time
import unittest
from run.BSTestRunner import BSTestRunner
def runner():
#指定测试用例的目录
testcase_dir='../testcase'
#指定测试报告的目录
report_dir='../report'
#给测试报告命名
now=time.strftime('%Y-%m-%d %H-%M-%S')
report_name=report_dir+'/'+now+'_test_report.html'
#筛选要执行的测试用例
testcase=unittest.defaultTestLoader.discover(testcase_dir,pattern='*_test.py')
#执行用例,生成报告
with open(report_name,'wb')as f:
runner=BSTestRunner(stream=f,title='我的测试报告',description='to8to_app')
runner.run(testcase)
if __name__ == '__main__':
runner()