第一次发布海报。
我转向关于堆栈溢出的第一个问题,因为我找到了很少的资源来寻找答案。我想从C#应用程序执行Selenium python测试。我不想每次都要编译C#Selenium测试;我想利用IronPython脚本进行动态硒测试。 (注意:我没有Python或ScriptEngine等经验。)
Selenium以下列形式在python中输出单元测试:
from selenium import selenium
import unittest
class TestBlah(unittest.TestCase):
def setUp(self):
self.selenium = selenium(...)
self.selenium.start()
def test_blah(self):
sel = self.selenium
sel.open("http://www.google.com/webhp")
sel.type("q", "hello world")
sel.click("btnG")
sel.wait_for_page_to_load(5000)
self.assertEqual("hello world - Google Search", sel.get_title())
print "done"
def tearDown(self):
self.selenium.stop()
if __name__ == "__main__":
unittest.main()
我可以使用ipy.exe从命令行运行,没问题:
ipy test_google.py
我可以看到Selenium Server启动一个firefox浏览器实例并运行测试。
我无法使用C#,.NET 3.5中的ScriptEngine等API获得相同的结果,我认为它的核心是无法执行main()函数我猜测以下代码是:
if __name__ == "__main__":
unittest.main()
我已经尝试过engine.ExecuteFile(),engine.CreateScriptSourceFromString()/ source.Execute()和engine.CreateScriptSourceFromFile()/ source.Execute()。我尝试了scope.SetVariable(“__name__
”,“__main__
”)。当我在py文件中注释if __name__
部分并且在py上调用engine.Runtime.ExecuteFile()之后调用engine.CreateScriptSourceFromString(“unittest.main(module = None”)时,我确实取得了一些成功。我已经尝试将结果存储在python中并通过scope.GetVariable()访问它们。我也尝试编写一个python函数,我可以从C#调用它来执行单元测试。
(引擎是ScriptEngine的一个实例,源代码是ScriptSource的一个实例,等等)
我对Python,ScriptEngine或unittest模块的无知很容易成为我的麻烦。有没有人有幸在C#中使用ScriptEngine等API执行python单元测试?有没有人成功地从ScriptEngine执行“主要”代码?
此外,我已经读过unittest有一个测试运行器,它将通过TestResult对象帮助访问错误。我相信语法如下。我还没到这里,但知道我需要收获结果。
unittest.TextTestRunner(verbosity=2).run(unittest.main())
提前致谢。我认为有更多细节而不是更少的细节会更好。 = P
答案 0 :(得分:2)
查看IronPython控制台(ipy.exe)的source code,看起来最终归结为调用ScriptSource.ExecuteProgram()
。您可以从各种ScriptSource
方法中获取ScriptEngine.CreateScriptSourceFrom*
。
例如:
import clr
clr.AddReference("IronPython")
from IronPython.Hosting import Python
engine = Python.CreateEngine()
src = engine.CreateScriptSourceFromString("""
if __name__ == "__main__":
print "this is __main__"
""")
src.ExecuteProgram()
运行此选项将打印“这是主要”。
答案 1 :(得分:0)
尝试以下方法:
unittest.main(module=__name__)