1.po模型概述
我们进行自动化测试时,如果把代码都写在一个脚本中,代码的可读性会变差,且后期代码维护也麻烦,最好的想法就是测试对象和测试用例可以分离,可以很快定位问题,代码可读性高,也比较容易理解。这里推荐大家在自动化框架中加入PO模型思想,那什么是PO模型呢?
所谓的PO就是page object,通俗解释一下就是每个页面当成一个对象,给这些页面写一个类,主要就是完成元素定位和业务操作。
而在实际的用例书写中,你就会发小,UI自动化的操作是比较固定的,常用的方法比较固定(点击、传入键值、截图等),而不同的是所操作的元素,这样的话我们只需要传入不同的元素即可。
详情请点击 https://study.163.com/course/introduction/1209833813.htm 查看
整体架构如下:
2.封装file.py
file.py中存放的是一些公共的方法,比如:读取配置文件、获取元素、加载用例等等
import re
import os
import logging
import logging.config
CON_LOG=os.path.abspath((os.path.dirname((os.path.dirname(__file__))))+'/config/log.conf')
logging.config.fileConfig(CON_LOG)
logging=logging.getLogger()
import configparser
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException
import time
from datetime import datetime
import warnings
warnings.simplefilter("ignore", ResourceWarning)
import subprocess
class ReadTxt():
def __init__(self,file_path=None):
if file_path==None:
self.file_path=os.path.abspath((os.path.dirname(os.path.dirname(__file__)))+'/config/app_info.txt')
else:
self.file_path=file_path
def get_appinfo(self,value): #读取app的配置文件app_info.txt
logging.info("读取app_info.txt文件")
with open(self.file_path) as f:
lines=f.readlines()
for line in lines:
key_value=re.split('=',line)
if key_value[0]==value:
return key_value[1].replace("\n","")
else:
continue
class ReadIni(): #读取ini文件的类
def __init__(self,file_path=None):
if file_path==None:
self.file_path=os.path.abspath((os.path.dirname(os.path.dirname(__file__)))+'/config/page.ini')
else:
self.file_path=file_path
self.data=self.read_ini()
def read_ini(self):
read_ini=configparser.ConfigParser()
read_ini.read(self.file_path,encoding="utf-8-sig")
return read_ini
def get_value(self,session,key):
logging.info("get value: ["+session +"] - [" + key +"] from "+ self.file_path )
try:
value=self.data.get(session,key)
except:
logging.error("获