四. Common文件夹
Common 文件夹下存放着一些自定义的通用模块,将一些可以复用的代码进行了简单封装,为框架提供工具支持,如下所示:
Common/
├── getPath.py
├── log.py
└── sendEmail.py
1. getPath.py
getPath.py 的功能是为框架获取一些关键性路径,如配置文件 config.ini 的存放路径,最终测试报告的存放目录等。内容如下:
1 import os
2
3 class GetPath():
4 def __init__(self):
5 # 获取当前文件所在目录
6 self.current_dir = os.path.split(os.path.realpath(__file__))[0]
7 # 获取App文件夹路径
8 self.app_dir = os.path.abspath(os.path.dirname(self.current_dir))
9 # 获取项目的根目录路径
10 self.project_dir = os.path.abspath(os.path.dirname(self.app_dir))
11
12 def get_conf_path(self):
13 """
14 返回config.ini文件路径
15 """
16 path = os.path.join(self.project_dir, 'config.ini')
17 return path
18
19 def get_log_path(self):
20 """
21 返回logs.txt文件路径
22 """
23 path = os.path.join(self.project_dir, 'logs.txt')
24 return path
25
26
27 def get_case_dir(self):
28 """
29 返回测试用例文件存放目录
30 """
31 dir = os.path.join(self.project_dir, 'TestCase')
32 return dir
33
34 def get_report_dir(self):
35 """
36 返回测试报告存放目录
37 """
38 dir = os.path.join(self.project_dir, 'Report')
39 return dir
40
41
42 if __name__ == '__main__':
43 print(GetPath().get_conf_path())
44 print(GetPath().get_case_dir())
45 print(GetPath().get_report_dir())
46 print(GetPath().get_log_path())
运行一下,命令行输入:python getPath.py
,结果如下:
>>> python getPath.py
/home/user1/ProgramFile/IntTestDemo/config.ini
/home/user1/ProgramFile/IntTestDemo/TestCase
/home/user1/ProgramFile/IntTestDemo/Report
/home/user1/ProgramFile/IntTestDemo/logs.txt
2. log.py
logging 是python的一个内置模块,该模块定义的函数和类为应用程序和库的开发实现了一个灵活的事件日志系统。
log.py 用于配置日志的输出格式以及日志文件的写入,往后的使用中直接引入就可以了,例如:
import os
# 从Common包引入Log
from Common.log import Log
log = Log(__name__).getlog()
# 判断用例文件是否存在
if not os.path.isfile(case_file_path):
log.error("测试用例文件不存在!")
log.py 文件内容如下:
1 import os
2 import logging
3 from .getPath import GetPath
4
5
6 class Log(object):
7 def __init__(self, logger=None):
8 """
9 设置log并指定日志文件
10 """
11 # 创建一个logger
12 self.logger = logging.getLogger(logger)
13 self.logger.setLevel(logging.INFO)
14 # 指定日志路径
15 self.log_path = GetPath().get_log_path()
16 # 创建一个handler,用于写入日志
17 fh = logging.FileHandler(self.log_path, mode='a')
18 fh.setLevel(logging.DEBUG) # 输出到日志的log等级为DEBUG
19 # 创建一个handler,用于输出到控制台
20 ch = logging.StreamHandler()
21 ch.setLevel(logging.WARNING)
22 # 定义两个handler的输出格式
23 formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
24 fh.setFormatter(formatter)
25 ch.setFormatter(formatter)
26 # 给logger添加hanler
27 self.logger.addHandler(fh)
28 self.logger.addHandler(ch)
29
30 def getlog(self):
31 return self.logger
32
33 if __name__ == '__main__':
34 log = Log(__name__).getlog()
35 log.error("测试用例文件不存在!")
回到上层目录 IntTestDemo/App 下试运行:
>>> python -m Common.log
2019-05-16 18:42:52,661 - log.py[line:35] - ERROR: 测试用例文件不存在!
程序会自动生成了日志文件 logs.txt,打开后可以看到已经写入了一条日志。
3. sendEmail.py
该模块的作用是在测试完成后将测试报告发送给特定的用户,我们留到后面再做叙述,暂时不必理会。
4. 别忘记推送代码
>>> cd ../ # 回到根目录IntTestDemo
>>> git add . # 将项目改动放入暂存区
>>> git commit -m # 将暂存区的的修改提交到当前分支,m参数表示添加注释
>>> git push origin master # 推送到远程服务器(github)