In your code test_mdel method extra one parameter ids is added. so remove the extra parameter
The Below code copy_data method used in sale order
def copy_data(self, cr, uid, id, default=None, context=None):
if not default:
default = {}
default.update({'state': 'draft', 'invoice_lines': []})
return super(sale_order_line, self).copy_data(cr, uid, id, default, context=context)
if you are override copy_data method then use super otherwise try the below code:-
def test_mdel(self, cr, uid, id, default=None, context=None):
default={}
test = self.copy(cr,uid, id[0], default=default, context=context)
return test
or
def test_mdel(self, cr, uid, id, default=None, context=None):
default={}
test = self.copy_data(cr,uid, id[0], default=default, context=context)
return self.create(cr, uid, test, context=context)
The above code after clicking the button create a new record with copy of same data.
https://doc.openerp.com/6.0/developer/2_5_Objects_Fields_Methods/methods/