我在Robot Framework中编写了一些测试用例,我的项目结构是这样的:
@IBOutlet weak var currentimage: UIImageView!
var currentfile : Files?
override func viewDidLoad()
{
super.viewDidLoad()
currentimage.image = UIImage(named: currentfile!.filename)
}
我有TestProject
|__ TestScenarios
|__ TestCategory1
|__ TestCategory2
|__ __init__.py
|__ RunTest.py
打开浏览器,其中包含指定的网址和suit setup
,可关闭suit teardown
中的所有浏览器。我打电话给__init__.py
以运行我的测试用例;我在RunTest.py
中设置了测试中应包含或排除的目录以及其他一些首选项。
如果我从顶级目录设置测试目录,即RunTest.py
,则会调用TestScenarios
。但是当我为运行设置子目录时,__init__.py
逻辑上不会被调用,因此没有浏览器。如果我将另一个__init__.py
文件添加到子目录中,如果我从顶层目录运行测试会有问题;会有多个浏览器。
我想要的是在每个子目录中添加一个__init__.py
文件,但在这些新的__init__.py
文件中,我将检查浏览器是否打开,如果是,我将继续使用当前的一个,否则我将打开一个新的浏览器。所以。我可以轻松地在目录之间切换。
任何帮助我怎么能做我在上一段中谈到的内容?
答案 0 :(得分:1)
一种解决方案是运行您知道如果没有打开浏览器就会失败的关键字。如果关键字失败,请打开浏览器。如果成功,什么都不做。
它可能看起来像这样:
*** Keywords ***
| Maybe open browser
| | # Don't capture screenshot if this fails
| | ${fail keyword}= | Register keyword to run on failure | Nothing
| |
| | # Run a keyword and capture the status
| | ${status}= | run keyword and return status | Get Window Identifiers
| |
| | # Reset the run-on-failure keyword
| | Register keyword to run on failure | ${fail keyword}
| |
| | # Return if the keyword succeeds, on the assumption
| | # that a browser window is already open
| | Run keyword unless | ${status} == False | Return from keyword
| |
| | # No browser was open, so open one
| | log | No browser was previously open
| | Open browser | http://www.google.com | chrome
在我看来,最好的解决方案是始终从根文件夹运行测试,并使用命令行参数和标记来运行特定的套件。
答案 1 :(得分:0)
您可以使用subprocess
模块查看实时流程并检查您的浏览器是否已打开:
import subprocess
def __init__(proc_name,flag=False):
p = subprocess.Popen(['ps','-A'], stdout=subprocess.PIPE)
out, err = p.communicate()
for line in out.splitlines():
if proc_name in line:
print line
flag=True
# continue with current proc
#pid = int(line.split(None, 1)[0]) if you need pid
if not flag:
#start new proc
如果你想杀死一个过程,你可以起诉os,kill
如下:
os.kill(pid, subprocess.signal.SIGKILL)