旅游网站规划设计与建设,反恶意镜像网站,方正网站制作,设计网名姓氏 TaskSets是一种结构化测试分层网站/系统的方法。你可以在这里阅读更多关于它的信息。
1.TaskSet class
如果你正在对一个以分层方式构建的网站进行性能测试#xff0c;有章节和子章节#xff0c;以同样的方式构建你的负载测试可能是有用的。
为了这个目的#x… TaskSets是一种结构化测试分层网站/系统的方法。你可以在这里关于它的信息。
1.TaskSet class
如果你正在对一个以分层方式构建的网站进行性能测试有章节和子章节以同样的方式构建你的负载测试可能是有用的。
为了这个目的Locust提供了TaskSet类。它是一个任务的集合将被执行就像直接在用户类上声明的那些任务。 注意 任务集是一个高级功能只是很少有用。大多数时候你最好使用常规的 Python 循环和控制语句来实现同样的事情。也有一些问题最常见的是忘记调用self.interrupt() from locust import User, TaskSet, constantclass ForumSection(TaskSet):wait_time constant(1)task(10)def view_thread(self):passtaskdef create_thread(self):passtaskdef stop(self):self.interrupt()class LoggedInUser(User):wait_time constant(5)tasks {ForumSection:2}taskdef my_task(self):pass一个任务集也可以使用task装饰器直接内联到User/TaskSet类下。
class MyUser(User):taskclass MyTaskSet(TaskSet):...一个任务集类的任务可以是其他的任务集类允许它们嵌套任何数量的级别。这使得我们可以定义一种行为以一种更真实的方式模拟用户。
例如我们可以定义具有以下结构的TaskSets。
- Main user behaviour- Index page- Forum page- Read thread- Reply- New thread- View next page- Browse categories- Watch movie- Filter movies- About page 当一个正在运行的用户线程选择一个TaskSet类来执行时这个类的实例将被创建然后执行将进入这个TaskSet。
然后发生的事情是TaskSet的一个任务将被选中并执行然后线程将睡眠一个由User的wait_time函数指定的持续时间除非在TaskSet类上直接声明了一个wait_time函数在这种情况下它将使用该函数然后从TaskSet的任务中挑选一个新任务再次等待如此循环。
TaskSet实例包含一个对用户的引用 - self.user。它也有一个指向其用户的客户端属性的快捷方式。所以你可以使用self.client.request()进行请求就像你的任务直接定义在一个HttpUser上一样。
2. 终断 TaskSet
关于TaskSets的一个重要的事情是它们永远不会停止执行它们的任务并把执行权交还给它们的父用户/TaskSet自己。这必须由开发者通过调用TaskSet.interrupt()方法来完成。
interrupt(self, rescheduleTrue)
# 中断任务集并将执行控制权交还给父任务集。
# 如果reschedule为True默认父用户将立即重新安排并执行一个新任务。在下面的例子中如果我们没有调用self.interrupt()的停止任务模拟用户一旦进入论坛的任务集就永远不会停止运行任务。
class RegisteredUser(User):taskclass Forum(TaskSet):task(5)def view_thread(self):passtask(1)def stop(self):self.interrupt()taskdef frontpage(self):pass使用中断函数我们可以-与任务加权一起–定义一个模拟用户离开论坛的可能性有多大。
3. TaskSet和User中的任务之间的区别
与直接驻留在用户下的任务相比驻留在 TaskSet 下的任务的一个区别是它们在执行时被传递的参数对于用 task decorator 声明为方法的任务来说是对 TaskSet 实例的引用而不是对用户实例的引用。用户实例可以通过 TaskSet.user 从 TaskSet 实例中被访问。TaskSets 还包含一个方便的客户属性它指的是 User 实例上的客户属性。
4. 引用用户实例或父任务集实例
一个TaskSet实例的属性user将指向它的User实例而属性parent则指向它的父任务集实例。
5. 标签和TaskSet
你可以使用tag装饰器来标记TaskSets方法与普通任务类似但有一些细微差别值得一提。给一个TaskSet打上标签将自动把标签应用到该任务集的所有任务中。
此外如果你在一个嵌套的TaskSet中标记一个任务即使这个TaskSet没有被标记Locust也会执行这个任务。
6. SequentialTaskSet 类
SequentialTaskSet是一个任务集其任务将按照它们被声明的顺序执行。可以在一个任务集中嵌套SequentialTaskSets反之亦然。
例如下面的代码将按顺序请求URLs /1-/4然后再重复。
def function_task(taskset):taskset.client.get(/3)class SequenceOfTasks(SequentialTaskSet):taskdef first_task(self):self.client.get(/1)self.client.get(/2)# 您仍然可以使用 tasks 属性来指定任务列表tasks [function_task]taskdef last_task(self):self.client.get(/4)注意你不需要SequentialTaskSets来按顺序做一些请求。通常在一个任务中做整个用户流会更容易。
更多教程更多实战案例请阅读https://edu.csdn.net/course/detail/38449 更多教程更多实战案例请阅读https://edu.csdn.net/course/detail/38449