【发布时间】:2011-04-14 05:37:37
【问题描述】:
第一次海报。
我正在转向关于堆栈溢出的第一个问题,因为我在尝试找到答案时发现的资源很少。我正在寻找从 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# 调用来执行单元测试。
(engine是ScriptEngine的实例,source是ScriptSource的实例等)
我对 Python、ScriptEngine 或 unittest 模块的无知很容易导致我遇到麻烦。有没有人在 C# 中使用 ScriptEngine 等 API 执行 python 单元测试?有没有人从 ScriptEngine 成功执行“主要”代码?
另外,我读到 unittest 有一个测试运行器,可以帮助通过 TestResult 对象访问错误。我相信语法如下。我还没到这里,但知道我需要收获结果。
unittest.TextTestRunner(verbosity=2).run(unittest.main())
提前致谢。我认为最好有更多的细节而不是更少。 =P
【问题讨论】:
标签: c# unit-testing selenium ironpython