download:Django开发企业实战 面向就业/升职(中高级教程)

从实际需求分析开始,实现当今主流知识问答应用的功能,包括动态、文章、问答、私信、消息通知、搜索、个人中心,打造企业级知识问答网站,由此全面学习Python后端开发技术栈,内容涵盖Python、Django生态、通用类视图的源码、DFS/BFS/C3线性化算法、组合模式与观察者模式、TestCase测试用例、MySQL数据库、Redis缓存、WebSocket实时推送、Haystack+Elasticsearch搜索、应用部署和运维、云计算服务。从零开发到阿里云上线,讲解企业项目开发的全过程。

适合人群 需要提升工作经验的Python开发者 具备Django框架开发经验的程序员 准备跳槽的Python开发 不适合:没有django基础的学员 技术储备要求 具备Django开发经验 熟悉MySQL使用 熟练使用Python3.6+ 掌握基本的Linux命令 添加依賴

  org.testng
  testng
  6.8.8
  test

運用DataProvider提供數據有兩種方式: 把測試代码和測試數據放在同一個類中; 把一切的數據提供都單獨寫在一個類里面,當測試數據比擬多時,這種辦法利於維護。 用法

  1. 常規用法 import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class ParamTestWithDataProvider1 { @DataProvider(name = "test1") public static Object[][] primeNumbers() { return new Object[][] { { 2, true ,"hi"}, { 6, false ,"test"}, { 19, true ,"good"}, { 22, false ,"aha"}, { 23, true ,"loo"} }; } //參數必需要分歧 @Test(dataProvider = "test1") public void testPrimeNumberChecker(Integer inputNumber, Boolean expectedResult, String test) { System.out.println(inputNumber + " " + expectedResult+" "+test); } }
  2. 帶Method參數的DataProvider 假如希望DataProvider對不同的Test辦法運用不同的dataprovider,那麼在DataProvider中能夠運用Method參數

import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import java.lang.reflect.Method; public class ParamTestWithDataProvider2 { @Test(dataProvider = "provider") public void getFirst(String name, int age) { System.out.println("第一組"+name); } @Test(dataProvider = "provider") public void getSecond(String name, int age) { System.out.println("第二組 " + name); } @DataProvider(name = "provider") public Object[][] provider(Method method) { Object[][] objects; if (method.getName().equals("getFirst")) { //假如調用該DataProvider的函數是getFirst,那麼就返回這個數組 objects = new Object[][] { { "cq1", 20 }, { "cq2", 22 } }; } else if (method.getName().equals("getSecond")) {//假如調用該DataProvider的函數是getSecond,那麼就返回這個數組 objects = new Object[][] { { "cq3", 20 }, { "cq4", 22 } }; } else { //假如調用該DataProvider的函數不是getFirst也不是getSecond,那麼就返回這個數組 objects = new Object[][] { {"cq5",33}, {"cq6",34} }; } return objects; } } 3. 經過DataProviderClass 把測試數據文件引過來 import org.testng.annotations.DataProvider; public class DataProviderMethod { //無指定數據稱號,默許運用辦法名 @DataProvider public static Object[][] NoNameMethod(){ return new Object[][]{ {"DataWithNoName1"}, {"DataWithNoName2"}, {"DataWithNoName3"} }; } //指定稱號1 @DataProvider(name="dataprovider1") public static Object[][] dataProvider1(){ return new Object[][]{ {"dataprovider1-1"}, {"dataprovider1-2"} }; } //指定稱號2 @DataProvider(name="dataprovider2") public static Object[][] dataProvider2(){ return new Object[][]{ {"dataprovider2-1"}, {"dataprovider2-2"} }; } } import org.testng.annotations.Test; public class ParamTestWithDataProvider3 { @Test(dataProvider="NoNameMethod",dataProviderClass=DataProviderMethod.class) public void doTestNG(String testdatas) { System.out.println("未指定稱號,數據源名爲辦法名NoNameMethod:"+testdatas); } @ Test(dataProvider="dataprovider1",dataProviderClass=DataProviderMethod.class) public void doTestNG1(String testdatas){ System.out.println("指定稱號,數據源稱號選择了dataprovider1:"+testdatas); } @Test(dataProvider="dataprovider2",dataProviderClass=DataProviderMethod.class) public void doTestNG2(String testdatas){ System.out.println("指定稱號,數據源稱號選择了dataprovider2:"+testdatas); } }