ddt csv写入数据报错

#csv 文件读取
import csv




class CsvDate():
    def Date(self):
        csv_path = r"E:\QQ File\TestRace\testdata.csv"

        with open(csv_path, "r", encoding="utf-8") as f:
            csvreader = csv.reader(f)
            data_list = []
            i=0
            for getDate in csvreader:
                if i!=0:
                    data_list.append(getDate)
                i+=1
        return data_list





if __name__ == '__main__':
    DateClass = CsvDate()
    Date = DateClass.Date()
    print(Date)

打印结果 [['5555222', '九月十四日1'], ['5555223', '九月十四日2'], ['5555224', '九月十四日3'], ['5555225', '九月十四日4']]

#测试用例
import time
import unittest
import ddt
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from csvv import CsvDate


class Test_Question_three(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
        self.driver.get("https://litemall.hogwarts.ceshiren.com/#/login?redirect=%2Fdashboard")
        self.driver.maximize_window()
        self.driver.implicitly_wait(3)

    def tearDown(self):
        self.driver.quit()

    @ddt.data(*CsvDate().Date())
    @ddt.unpack
    def test_Question_three(self,data1,data2):
        ele1 = self.driver.find_element(By.NAME, "username")
        ele1.clear()
        ele1.send_keys("manage")
        ele2 = self.driver.find_element(By.NAME, "password")
        ele2.clear()
        ele2.send_keys("manage123")
        self.driver.find_element(By.TAG_NAME, "button").click()

        self.driver.find_element(By.CLASS_NAME, "el-submenu__title")[2].click()
        self.driver.find_element(By.XPATH, "//*[text()='商品列表']").click()
        self.driver.find_element(By.XPATH, "//*[text()='添加']").click()

        ele3 = self.driver.find_element(By.XPATH,"//*[@id='app']/div/div[2]/section/div/div[1]/div/form/div[1]/div/div[1]/input" )
        ele3.send_keys(data1)  # 输入CSV数据

        ele4 = self.driver.find_element(By.XPATH,
                                        "//*[@id='app']/div/div[2]/section/div/div[1]/div/form/div[2]/div/div/input")
        ele4.send_keys(data2)  # 输入CSV数据
        self.driver.find_element(By.XPATH, "//*[text()='上架']").click()
        time.sleep(2)

if __name__ == '__main__':
    unittest.main()


报错信息  TypeError: test_Question_three() missing 2 required positional arguments: 'data' and 'data2'

问题点: 要在测试类Test_Question_three上加@ddt.ddt,否则会报错

代码修改如下:

#csv 文件读取
import csv
 

class CsvDate():
    def Date(self):
        csv_path = r"E:\QQ File\TestRace\testdata.csv"
 
        with open(csv_path, "r", encoding="utf-8") as f:
            csvreader = csv.reader(f)
            data_list = []
            i=0
            for getDate in csvreader:
                if i!=0:
                    data_list.append(getDate)
                i+=1
        return data_list
 

 
#测试用例
import time
import unittest
import ddt
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from csvv import CsvDate
 
@ddt.ddt
class Test_Question_three(unittest.TestCase):
 
    def setUp(self):
        self.driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
        self.driver.get("https://litemall.hogwarts.ceshiren.com/#/login?redirect=%2Fdashboard")
        self.driver.maximize_window()
        self.driver.implicitly_wait(3)
 
    def tearDown(self):
        self.driver.quit()
 
    @ddt.data(*CsvDate().Date())
    @ddt.unpack
    def test_Question_three(self,data1,data2):
        ele1 = self.driver.find_element(By.NAME, "username")
        ele1.clear()
        ele1.send_keys("manage")
        ele2 = self.driver.find_element(By.NAME, "password")
        ele2.clear()
        ele2.send_keys("manage123")
        self.driver.find_element(By.TAG_NAME, "button").click()
 
        self.driver.find_element(By.CLASS_NAME, "el-submenu__title")[2].click()
        self.driver.find_element(By.XPATH, "//*[text()='商品列表']").click()
        self.driver.find_element(By.XPATH, "//*[text()='添加']").click()
 
        ele3 = self.driver.find_element(By.XPATH,"//*[@id='app']/div/div[2]/section/div/div[1]/div/form/div[1]/div/div[1]/input" )
        ele3.send_keys(data1)  # 输入CSV数据
 
        ele4 = self.driver.find_element(By.XPATH,
                                        "//*[@id='app']/div/div[2]/section/div/div[1]/div/form/div[2]/div/div/input")
        ele4.send_keys(data2)  # 输入CSV数据
        self.driver.find_element(By.XPATH, "//*[text()='上架']").click()
        time.sleep(2)
 
if __name__ == '__main__':
    unittest.main()

这个报错说明test_Question_three()方法缺少两个必需的位置参数:datadata2。根据代码中的@ddt.unpack装饰器,测试方法的参数应该与@ddt.data装饰器传递的csv数据的列数相匹配。

请确保@ddt.data装饰器传递的csv数据有两列,并在test_Question_three()方法中正确命名和使用这两个参数。例如:

@ddt.data(*CsvDate().Date())
@ddt.unpack
def test_Question_three(self, data1, data2):
    # test logic

请检查一下你的csv数据是否包含了正确的列数,并确保参数名称与csv数据列的内容一致。

如果问题仍然存在,请提供更多相关的代码和示例数据,以便我能够更好地帮助你解决问题。

img


读取csv文件打印出来的 [['5555222', '九月十四日1'], ['5555223', '九月十四日2'], ['5555224', '九月十四日3'], ['5555225', '九月十四日4']]

【相关推荐】




如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^