You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NUnit/Selenium C#项目如何从默认页面调用所有测试用例

解决方案

前置配置

  • 首先在Web项目(Selenium命名空间所属项目)中添加对测试项目(SeleniumTests命名空间所属项目)的项目引用,确保Web项目可以访问测试项目的公共类和方法。
  • 在Web项目中安装对应测试框架的核心NuGet包:使用NUnit就安装NUnit包,使用MSTest就安装MSTest.TestFramework包,保证Web项目可以识别[Test]特性、兼容测试方法的依赖逻辑。

实现调用逻辑

你可以直接在默认页的后端代码中通过反射批量扫描执行测试用例,也可以按需直接调用指定测试方法,示例代码如下:

using System;
using System.Reflection;
using System.Linq;
using SeleniumTests;
// NUnit用户用这个引用
using NUnit.Framework; 
// MSTest用户替换为下面的引用
// using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace Selenium
{
    public partial class DefaultPage : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            // 1. 批量执行所有测试用例逻辑
            // 加载测试项目的程序集
            Assembly testAssembly = Assembly.GetAssembly(typeof(Login));
            // 筛选所有公共测试类,可根据自己的命名规则调整过滤条件
            var testClasses = testAssembly.GetTypes().Where(t => t.IsClass && t.IsPublic);
            
            foreach (var testClass in testClasses)
            {
                // 创建测试类实例,要求测试类必须有公共无参构造函数
                object testInstance = Activator.CreateInstance(testClass);
                // 筛选当前类下所有带[Test]特性的公共方法
                var testMethods = testClass.GetMethods(BindingFlags.Public | BindingFlags.Instance)
                    .Where(m => m.GetCustomAttributes(typeof(TestAttribute), false).Any());
                
                foreach (var testMethod in testMethods)
                {
                    try
                    {
                        // 执行无参测试方法
                        testMethod.Invoke(testInstance, null);
                        Response.Write($"测试方法 {testClass.Name}.{testMethod.Name} 执行成功<br/>");
                    }
                    catch (Exception ex)
                    {
                        // 捕获测试执行异常,测试用例本身抛出的断言错误会被包裹在InnerException中
                        Response.Write($"测试方法 {testClass.Name}.{testMethod.Name} 执行失败,原因:{ex.InnerException?.Message ?? ex.Message}<br/>");
                    }
                }
            }

            // 2. 仅调用指定测试方法的简化写法,不需要扫描可以直接用下面的代码
            // Login loginTest = new Login();
            // loginTest.VerifyLoginValid();
        }
    }
}

注意事项

  • 若你的测试用例依赖[SetUp]/[TearDown]这类测试框架生命周期特性,需要额外扫描对应特性的方法,在测试方法执行前后手动调用
  • 测试用例如果涉及Selenium驱动、数据库连接这类资源,执行后要手动释放,避免进程残留
  • 生产环境不要开放这个测试调用入口,避免资源占用和安全风险

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 10:24:08