我正在尝试将测试框架与日志文件相关联,以确定哪些实例通过了哪些实例失败了。 为了更好地解释,这是一个示例: 我有一个清单:
data = ['F','P'] # first test pass, second test fail
这是我的日志文件:
USER INPUT : “clear” ------
SYSTEM RESPONSE: “Hello! How are you?” | Fail
USER INPUT : “Good thank you” |
SYSTEM RESPONSE: "Okay" ------
USER INPUT : “clear” ------
SYSTEM RESPONSE: “Hello! How are you?” |
USER INPUT : “I am good, Thank you!” | Pass
SYSTEM RESPONSE: "Great!" |
USER INPUT : “Good” ------
因此,每个“清除”实例都会显示一个新日志,因此,我想要第一个“清除”直到下一个清除与P关联,我正在使用html来构建代码,每当发生P时,绿色 并且每次出现F时,代码都为红色
到目前为止,我所拥有的是:
for line in lines :
for i in cc:
if (data[i]== 'P'):
n = """<p style="color:green;>""" + line + '</p>'
else:
n = """<p style="color:red;>""" + line + '</p>'
我真的不确定结构。 如何在每次发生“清除”时查找并为它分配特定的颜色,直到出现下一个实例。 请随时问我有关此问题或进一步澄清! 万分感谢!
答案 0 :(得分:3)
您可以使用re
根据USER INPUT : "clear"
拆分日志文件:
log_file = """USER INPUT : “clear”
SYSTEM RESPONSE: “Hello! How are you?”
USER INPUT : “Good thank you”
SYSTEM RESPONSE: "Okay"
USER INPUT : “clear”
SYSTEM RESPONSE: “Hello! How are you?”
USER INPUT : “I am good, Thank you!”
SYSTEM RESPONSE: "Great!"
USER INPUT : “Good”"""
import re
from pprint import pprint
groups = re.findall(r'USER INPUT.*?clear.*?(?:(?=USER INPUT :\s+\Wclear\W)|(?=\Z))', log_file, flags=re.DOTALL)
data = ['F','P']
style = {'P': '<p style="color:green;>', 'F': '<p style="color:red;>'}
html = ''
for d, g in zip(data, groups):
for line in g.splitlines():
html += style[d] + line + '</p>\n'
pprint(html)
此打印:
('<p style="color:red;>USER INPUT : “clear”</p>\n'
'<p style="color:red;>SYSTEM RESPONSE: “Hello! How are you?”</p>\n'
'<p style="color:red;>USER INPUT : “Good thank you”</p>\n'
'<p style="color:red;>SYSTEM RESPONSE: "Okay"</p>\n'
'<p style="color:green;>USER INPUT : “clear”</p>\n'
'<p style="color:green;>SYSTEM RESPONSE: “Hello! How are you?”</p>\n'
'<p style="color:green;>USER INPUT : “I am good, Thank you!”</p>\n'
'<p style="color:green;>SYSTEM RESPONSE: "Great!"</p>\n'
'<p style="color:green;>USER INPUT : “Good”</p>\n')
编辑:
我在网上示例了regex works here的情况。
答案 1 :(得分:1)
一种快捷方法是一次性读取所有文本,然后在USER INPUT : "clear"
上拆分。
# skip the first line since it's a clear, but not a separator
text = "\n".join(lines[1:])
split_on = 'USER INPUT : "clear" ------\n'
blocks = text.split(split_on)
html_lines = []
for pf, block in zip(data, blocks):
html_lines.append("<pre style='color:{};'>{}</pre>".format("green" if pf == "P" else "red", split_on + block))
with open("out.html", "w+") as outfile:
outfile.writelines(html_lines)