如何使用Popen

时间:2018-11-13 15:27:58

标签: python robotframework

我希望能够检索使用popen运行的机器人测试的结果(无论是通过还是失败)。我想使用popen来支持对话框和非对话框测试。有什么方法可以检索结果吗?我在这里(link).

使用此页面中的代码
import sys
import subprocess

my_path = sys.executable
def run_process(command):
    print("Running command: " + command)
    p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)

    while True:
        if sys.version_info >= (3, 0):
            nextline = str(p.stdout.readline(),"utf-8")
        else:
            nextline = p.stdout.readline()
        if nextline == '' and p.poll() is not None:
            break
        sys.stdout.write(nextline)
        sys.stdout.flush()

python_path = my_path + ' -m robot.run'
Location ='C:/Users/Desktop/pass_or_fail.robot'
command=python_path+' '+Location
run_process(command)
print(my_path)

2 个答案:

答案 0 :(得分:0)

如果测试通过或失败,则可以将其存储为整数。例如,0表示测试通过,大于0的任何表示测试失败。这就是为什么我使用:

output = p.communicate()[0] rc = p.returncode

import sys
import subprocess

my_path = sys.executable
def run_process(command):
    global output
    global rc
    print("Running command: " + command)
    p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)

    while True:
        if sys.version_info >= (3, 0):
            nextline = str(p.stdout.readline(),"utf-8")
        else:
            nextline = p.stdout.readline()
        if nextline == '' and p.poll() is not None:
            break
        sys.stdout.write(nextline)
        sys.stdout.flush()
        output = p.communicate()[0]
        rc = p.returncode
python_path = my_path + ' -m robot.run'
Location ='C:/Users/Desktop/pass_or_fail.robot'
command=python_path+' '+Location
run_process(command)
print(my_path)
print(rc)

答案 1 :(得分:0)

我建议使用 popen Robot Framework API function 代替 robot.run.run_cli(arguments=None, exit=True)

<块引用>
from robot import run_cli

# Run tests and return the return code.
rc = run_cli(['--name', 'Example', 'tests.robot'], exit=False)

这将简化执行,同时具有相同的返回代码。

<块引用>

返回代码与运行命令时类似 线。零表示执行了测试并且没有关键测试失败, 高达 250 的值表示失败的关键测试的数量,并且 251-255 之间的值用于 Robot Framework User Guide 中记录的其他状态。

此外,通过以编程方式执行多次运行,robot.rebot.rebot_cli(arguments=None, exit=True) API call 可用于将所有结果合并到单个 log.html 和 report.html 文件中。

<块引用>
from robot import rebot_cli

rebot_cli(['--name', 'Example', '--log', 'NONE', 'o1.xml', 'o2.xml'])